vite-plugin-mock-dev-server 1.1.7 → 1.1.9

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/dist/index.cjs CHANGED
@@ -1,7 +1,7 @@
1
- "use strict";var Ye=Object.create;var A=Object.defineProperty;var Ze=Object.getOwnPropertyDescriptor;var et=Object.getOwnPropertyNames;var tt=Object.getPrototypeOf,ot=Object.prototype.hasOwnProperty;var rt=(e,o)=>{for(var t in o)A(e,t,{get:o[t],enumerable:!0})},ye=(e,o,t,r)=>{if(o&&typeof o=="object"||typeof o=="function")for(let n of et(o))!ot.call(e,n)&&n!==t&&A(e,n,{get:()=>o[n],enumerable:!(r=Ze(o,n))||r.enumerable});return e};var l=(e,o,t)=>(t=e!=null?Ye(tt(e)):{},ye(o||!e||!e.__esModule?A(t,"default",{value:e,enumerable:!0}):t,e)),nt=e=>ye(A({},"__esModule",{value:!0}),e);var jt={};rt(jt,{baseMiddleware:()=>ae,createDefineMock:()=>Ot,default:()=>St,defineMock:()=>wt,mockDevServerPlugin:()=>ge,mockWebSocket:()=>fe,transformMockData:()=>pe});module.exports=nt(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 De=l(require("fs"),1),U=l(require("fs/promises"),1),I=l(require("path"),1),We=require("esbuild"),Ie=l(require("fast-glob"),1),Ee=l(require("is-core-module"),1),Y=require("vite");var ve="vite-plugin-mock-dev-server",Me="1.1.7";var oe=l(require("fs/promises"),1),be=l(require("path"),1),xe=l(require("json5"),1),B={name:"externalize-deps",setup(e){e.onResolve({filter:/.*/},({path:o})=>{if(o[0]!=="."&&!be.default.isAbsolute(o))return{external:!0}})}},J={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"}})}},z={name:"json-loader",setup(e){e.onLoad({filter:/\.json$/},async({path:o})=>({contents:`export default ${await oe.default.readFile(o,"utf-8")}`,loader:"js"}))}},G=e=>({name:"alias-plugin",setup(o){o.onResolve({filter:/.*/},async({path:t})=>{let r=e.find(({find:c})=>it(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 it(e,o){return e instanceof RegExp?e.test(o):o.length<e.length?!1:o===e?!0:o.startsWith(`${e}/`)}var Q=l(require("fs"),1),X=l(require("path"),1),we=require("url"),Oe=l(require("debug"),1),Se=require("path-to-regexp"),re=l(require("picocolors"),1),S=e=>Array.isArray(e),C=e=>typeof e=="function",ct=e=>Object.prototype.toString.call(e)==="[object Object]",je=e=>ct(e)&&Object.keys(e).length===0,at=e=>e!==null&&typeof e=="object"&&typeof e.pipe=="function",Pe=e=>at(e)&&e.readable!==!1&&typeof e._read=="function"&&typeof e._readableState=="object";function Re(e){return new Promise(o=>setTimeout(o,e))}function Ce(e){return X.default.dirname((0,we.fileURLToPath)(e))}var D=(0,Oe.default)("vite:plugin-mock-dev-server"),j=e=>S(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 H(e,o,t){for(let n of o){let s=X.default.join(e,n);if(Q.default.existsSync(s)&&Q.default.statSync(s).isFile()){let i=t!=null&&t.pathOnly?s:Q.default.readFileSync(s,"utf-8");if(!(t!=null&&t.predicate)||t.predicate(i))return i}}let r=X.default.dirname(e);if(r!==e&&(!(t!=null&&t.rootDir)||r.startsWith(t==null?void 0:t.rootDir)))return H(r,o,t)}var K=(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 V(e,o){return e[0]==="^"&&new RegExp(e).test(o)||o.startsWith(e)}function _(e,o){return((0,Se.match)(e,{decode:decodeURIComponent})(o)||{params:{}}).params||{}}async function Le(e,o,t){let r=j(t.include),n=j(t.exclude),s={};if(o.define)for(let k in o.define){let m=o.define[k];s[k]=typeof m=="string"?m:JSON.stringify(m)}let{httpProxies:i}=K(o.server.proxy||{});i.push(...j(t.prefix));let c=j(t.wsPrefix),a={};try{let k=H(o.root,["package.json"]);k&&(a=JSON.parse(k))}catch{}let p=t.build.dist,d=await mt(process.cwd(),r,n),u=I.default.join(o.root,`mock-data-${Date.now()}.js`);await U.default.writeFile(u,d,"utf-8");let{code:w,deps:v}=await dt(u,s,o.resolve.alias),g=pt(v);await U.default.unlink(u);let y=[{filename:I.default.join(p,"mock-data.js"),source:w},{filename:I.default.join(p,"index.js"),source:lt(i,c,t.cookiesOptions,t.build.serverPort)},{filename:I.default.join(p,"package.json"),source:ut(a,g)}];try{if(I.default.isAbsolute(p)){await U.default.rm(p,{recursive:!0}),De.default.mkdirSync(p,{recursive:!0});for(let{filename:k,source:m}of y)await U.default.writeFile(k,m,"utf-8")}else for(let{filename:k,source:m}of y)e.emitFile({type:"asset",fileName:k,source:m})}catch{}}function pt(e){let o=new Set,t=[ve,"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,Ee.default)(s)&&o.add(s)})}),Array.from(o)}function ut(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":`^${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 lt(e,o,t={},r=8080){return`import { createServer } from 'node:http';
4
- import connect from 'connect';
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 Ie=f(require("fs"),1),q=f(require("fs/promises"),1),$=f(require("path"),1),Le=require("esbuild"),_e=f(require("fast-glob"),1),$e=f(require("is-core-module"),1),Z=require("vite");var xe="vite-plugin-mock-dev-server",we="1.1.9";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),R=e=>typeof e=="function",mt=e=>Object.prototype.toString.call(e)==="[object Object]",Ce=e=>mt(e)&&Object.keys(e).length===0,dt=e=>e!==null&&typeof e=="object"&&typeof e.pipe=="function",We=e=>dt(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 C=(0,je.default)("vite:plugin-mock-dev-server"),O=e=>S(e)?e:e==null?[]:[e],W={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 Fe(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),m={};try{let p=U(o.root,["package.json"]);p&&(m=JSON.parse(p))}catch{}let d=t.build.dist,M=await yt(process.cwd(),r,n),h=$.default.join(o.root,`mock-data-${Date.now()}.js`);await q.default.writeFile(h,M,"utf-8");let{code:H,deps:E}=await ht(h,s,o.resolve.alias),a=ft(E);await q.default.unlink(h);let u=[{filename:$.default.join(d,"mock-data.js"),source:H},{filename:$.default.join(d,"index.js"),source:gt(i,c,t.cookiesOptions,t.build.serverPort)},{filename:$.default.join(d,"package.json"),source:kt(m,a)}];try{if($.default.isAbsolute(d)){await q.default.rm(d,{recursive:!0}),Ie.default.mkdirSync(d,{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,$e.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
+ import connect from 'connect';
5
5
  import corsMiddleware from 'cors';
6
6
  import { baseMiddleware, mockWebSocket } from 'vite-plugin-mock-dev-server';
7
7
  import mockData from './mock-data.js';
@@ -24,18 +24,18 @@ app.use(baseMiddleware({ mockData }, {
24
24
  server.listen(${r});
25
25
 
26
26
  console.log('listen: http://localhost:${r}');
27
- `}async function mt(e,o,t){let r=await(0,Ie.default)(o,{cwd:e}),n=(0,Y.createFilter)(o,t,{resolve:!1}),s=r.filter(n),i="",c="";return s.forEach((a,p)=>{let d=(0,Y.normalizePath)(I.default.join(e,a));i+=`import * as m${p} from '${d}';
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((m,d)=>{let M=(0,Z.normalizePath)($.default.join(e,m));i+=`import * as m${d} from '${M}';
28
+ `,c+=`m${d}, `}),`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
32
32
  ? raw.default
33
33
  : Object.keys(raw || {}).map((key) => raw[key])
34
- )
35
- export default transformMockData(mockList);
36
- `}async function dt(e,o,t){var r;try{let n=await(0,We.build)({entryPoints:[e],outfile:"out.js",write:!1,target:["node14.18","node16"],platform:"node",bundle:!0,metafile:!0,format:"esm",define:o,plugins:[G(t),B,J,z]});return{code:n.outputFiles[0].text,deps:((r=n.metafile)==null?void 0:r.inputs)||{}}}catch(n){console.error(n)}return{code:"",deps:{}}}var se=require("buffer"),ie=require("url"),_e=l(require("cookies"),1),Ue=l(require("http-status"),1),N=l(require("mime-types"),1),ce=require("path-to-regexp"),F=l(require("picocolors"),1);var Z=l(require("co-body"),1),Te=l(require("formidable"),1);async function Fe(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 Z.default.json(e);if(r.startsWith("application/x-www-form-urlencoded"))return await Z.default.form(e);if(r.startsWith("text/plain"))return await Z.default.text(e);if(r.startsWith("multipart/form-data"))return await ft(e,o)}catch(s){console.error(s)}}async function ft(e,o){let t=(0,Te.default)(o);return new Promise((r,n)=>{t.parse(e,(s,i,c)=>{if(s){n(s);return}r({...i,...c})})})}function $e(e,o){return E(e.headers,o.headers)&&E(e.body,o.body)&&E(e.params,o.params)&&E(e.query,o.query)&&E(e.refererQuery,o.refererQuery)}function E(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(n,s,i){let c=Date.now(),{query:a,pathname:p}=(0,ie.parse)(n.url,!0);if(!p||t.length===0||!t.some(P=>V(P,n.url)))return i();let d=e.mockData,u=Object.keys(d).find(P=>(0,ce.pathToRegexp)(P).test(p));if(!u)return i();let{query:w}=(0,ie.parse)(n.headers.referer||"",!0),v=await Fe(n,o),g=new _e.default(n,s,r),y=g.get.bind(g),k=n.method.toUpperCase(),m=kt(d[u],{pathname:p,method:k,request:{query:a,refererQuery:w,body:v,headers:n.headers,getCookie:y}});if(!m)return i();D("middleware: ",k,n.url);let M=n,h=s;M.body=v,M.query=a,M.refererQuery=w,M.params=_(m.url,p),M.getCookie=y,h.setCookie=g.set.bind(g);let{body:b,delay:f,type:O="json",response:R,status:$=200,statusText:Ve}=m;if(ne(h,$,Ve),await gt(M,h,m),await yt(M,h,m),b){try{let P=C(b)?await b(M):b;await He(c,f),ht(h,P,O)}catch(P){T.error(`${F.default.red("[body error]")} ${n.url}
37
- `,P),ne(h,500),s.end("")}return}if(R){try{await He(c,f),await R(M,h,i)}catch(P){T.error(`${F.default.red("[response error]")} ${n.url}
38
- `,P),ne(h,500),s.end("")}return}s.end("")}}function kt(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,ce.pathToRegexp)(n.url).test(o);if(i&&n.validator){let c=_(n.url,o);if(C(n.validator))return n.validator({params:c,...r});try{return $e({params:c,...r},n.validator)}catch(a){return T.error(`${F.default.red("[validator error]")} ${o}
39
- `,a),!1}}return i})}function ne(e,o=200,t){e.statusCode=o,e.statusMessage=t||vt(o)}async function gt(e,o,{headers:t,type:r="json"}){let n=N.contentType(r)||N.contentType(N.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=C(t)?await t(e):t;Object.keys(s).forEach(i=>{o.setHeader(i,s[i])})}catch(s){T.error(`${F.default.red("[headers error]")} ${e.url}
40
- `,s)}}async function yt(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(S(s)){let[i,c]=s;o.setCookie(n,i,c)}else o.setCookie(n,s)})}catch(r){T.error(`${F.default.red("[cookies error]")} ${e.url}
41
- `,r)}}function ht(e,o,t){if(Pe(o))o.pipe(e);else if(se.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"?se.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 vt(e){return Ue.default[e]||"Unknown"}var Ae=l(require("events"),1),ee=l(require("fs"),1),Be=require("module"),ue=l(require("path"),1),Je=require("url"),le=l(require("chokidar"),1),ze=require("esbuild"),Ge=l(require("fast-glob"),1),W=require("vite");var Ne=require("url"),qe=l(require("lodash.sortby"),1);function pe(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,Ne.parse)(r.url,!0),i=t[n]??(t[n]=[]),c={...r,url:n};if(c.ws!==!0){let a=c.validator;je(s)||(C(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(t).forEach(r=>{t[r]=(0,qe.default)(t[r],n=>{if(n.ws===!0)return 0;let{validator:s}=n;if(!s)return 1;if(C(s))return 0;let{query:i,params:c,headers:a,body:p,refererQuery:d}=s;return 1/(q(i)+q(c)+q(a)+q(p)+q(d))})}),t}function q(e){return e?Object.keys(e).length:0}var Mt=Ce(x),L=(0,Be.createRequire)(Mt),te=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=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:t,exclude:r}=this.options,n=await(0,Ge.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=le.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),D("watcher:add",i)}),s.on("change",async i=>{i=(0,W.normalizePath)(i),this.emit("mock:update",i),D("watcher:change",i)}),s.on("unlink",async i=>{i=(0,W.normalizePath)(i),this.emit("mock:unlink",i),D("watcher:unlink",i)}),this.mockWatcher=s}watchDeps(){let t=[];this.depsWatcher=le.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=pe(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(a=>i[a]);S(c)?c.forEach(a=>a.__filepath__=t):c.__filepath__=t,this.moduleCache.set(t,c),this.updateModuleDeps(t,s)}catch(i){console.error(i)}}async loadFromCode(t,r,n){if(n){let s=`${t}.timestamp-${Date.now()}`,i=`${s}.mjs`,c=`${(0,Je.pathToFileURL)(s)}.mjs`;await ee.default.promises.writeFile(i,r,"utf8");try{return await import(c)}finally{try{ee.default.unlinkSync(i)}catch{}}}else{t=ue.default.resolve(this.cwd,t);let s=ue.default.extname(t),i=ee.default.realpathSync(t),c=s in L.extensions?s:".js",a=L.extensions[c];L.extensions[c]=(d,u)=>{u===i?d._compile(r,u):a(d,u)},delete L.cache[L.resolve(t)];let p=L(t);return L.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:[G(this.options.alias),B,z,J]});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"),Xe=l(require("cookies"),1),de=require("path-to-regexp"),Ke=require("ws");function fe(e,o,t,r){var c;let n=new Set,s=new Map,i=new Map;(c=e.on)==null||c.call(e,"mock:update-end",a=>{if(!n.has(a))return;let p={};for(let[d,u]of i.entries())e.mockData[d].forEach(w=>{w.ws&&w.__filepath__===a&&u.forEach(({pathname:v,req:g,ws:y})=>{p[v]??(p[v]={mock:w,list:[],mockUrl:d}),p[v].list.push({req:g,ws:y})})});Object.keys(p).forEach(d=>{var m;let{wss:u,cleanupList:w,context:v}=s.get(d),{mock:g,list:y,mockUrl:k}=p[d];Qe(w),u.removeAllListeners(),(m=g.setup)==null||m.call(g,u,v),u.on("close",()=>s.delete(d)),y.forEach(({req:M,ws:h})=>{h.removeAllListeners(),u.emit("connection",h,M),h.on("close",()=>{let b=i.get(k),f=(b==null?void 0:b.findIndex(O=>O.ws===h))||-1;f!==-1&&(b==null||b.splice(f,1))})})})}),o==null||o.on("upgrade",(a,p,d)=>{var b;let{pathname:u,query:w}=(0,me.parse)(a.url,!0);if(!u||t.length===0||!t.some(f=>V(f,a.url)))return;let v=e.mockData,g=Object.keys(v).find(f=>(0,de.pathToRegexp)(f).test(u));if(!g)return;let y=v[g].find(f=>f.url&&f.ws&&(0,de.pathToRegexp)(f.url).test(u));if(!y)return;n.add(y.__filepath__);let k=s.get(u);if(!k){let f=new Ke.WebSocketServer({noServer:!0}),O=[],R={onCleanup:$=>O.push($)};(b=y.setup)==null||b.call(y,f,R),f.on("close",()=>s.delete(u)),s.set(u,k={wss:f,cleanupList:O,context:R})}let m=a,M=new Xe.default(a,a,r),{query:h}=(0,me.parse)(a.headers.referer||"",!0);m.query=w,m.refererQuery=h,m.params=_(g,u),m.getCookie=M.get.bind(M),k.wss.handleUpgrade(m,p,d,f=>{D(`websocket-mock: ${a.url} connected`),k.wss.emit("connection",f,m);let O=i.get(g);O||i.set(g,O=[]),O.push({req:m,ws:f,pathname:u}),f.on("close",()=>{let R=O.findIndex($=>$.ws===f);R!==-1&&O.splice(R,1)})})}),o==null||o.on("close",()=>{s.forEach(({wss:a,cleanupList:p})=>{Qe(p),a.close()}),s.clear(),i.clear(),n.clear()})}function Qe(e){let o;for(;o=e.shift();)o==null||o()}async function ke(e,o,t,r){let n=j(o.include),s=j(o.exclude),i={};if(e.define)for(let d in e.define){let u=e.define[d];i[d]=typeof u=="string"?u:JSON.stringify(u)}let c=new te({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:a}=K(e.server.proxy||{}),p=j(o.prefix);return fe(c,t,j(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: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},p=[xt(a)];return a.build&&p.push(bt(a)),p}function bt(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 Le(this,o,e)}}}function xt(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 ke(r,e,n,s);t.use(i)},async configurePreviewServer({middlewares:t,httpServer:r}){let n=await ke(o,e,r);t.use(n)}}}function wt(e){return e}function Ot(e){return t=>(S(t)?t=t.map(r=>e(r)||r):t=e(t)||t,t)}var St=ge;0&&(module.exports={baseMiddleware,createDefineMock,defineMock,mockDevServerPlugin,mockWebSocket,transformMockData});
34
+ );
35
+ export default transformMockData(mockList);`}async function ht(e,o,t){var r;try{let n=await(0,Le.build)({entryPoints:[e],outfile:"out.js",write:!1,target:["node14.18","node16"],platform:"node",bundle:!0,metafile:!0,format:"esm",define:o,plugins:[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),Te=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,Te.default)(o);return new Promise((r,n)=>{t.parse(e,(s,i,c)=>{if(s){n(s);return}r({...i,...c})})})}function Ue(e,o){return F(e.headers,o.headers)&&F(e.body,o.body)&&F(e.params,o.params)&&F(e.query,o.query)&&F(e.refererQuery,o.refererQuery)}function F(e,o){if(!o)return!0;for(let t in o)if(o[t]!==e[t])return!1;return!0}function pe(e,{formidableOptions:o={},proxies:t,cookiesOptions:r}){return async function(n,s,i){let c=Date.now(),{query:m,pathname:d}=(0,ce.parse)(n.url,!0);if(!d||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(d));if(!h)return i();let{query:H}=(0,ce.parse)(n.headers.referer||"",!0),E=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:d,method:p,request:{query:m,refererQuery:H,body:E,headers:n.headers,getCookie:u}});if(!l)return i();C("middleware: ",p,n.url);let k=n,g=s;k.body=E,k.query=m,k.refererQuery=H,k.params=N(l.url,d),k.getCookie=u,g.setCookie=a.set.bind(a);let{body:y,delay:w,type:j="json",response:I,status:L=200,statusText:_}=l;if(se(g,L,_),await bt(k,g,l),await xt(k,g,l),y){try{let v=R(y)?await y(k):y;await Ne(c,w),wt(g,v,j)}catch(v){W.error(`${P.default.red("[body error]")} ${n.url}
36
+ `,`file: ${P.default.cyan(l.__filepath__)}`,v),se(g,500),s.end("")}return}if(I){try{await Ne(c,w),await I(k,g,i)}catch(v){W.error(`${P.default.red("[response error]")} ${n.url}
37
+ `,`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(R(n.validator))return n.validator({params:c,...r});try{return Ue({params:c,...r},n.validator)}catch(m){return W.error(`${P.default.red("[validator error]")} ${o}
38
+ `,`file: ${P.default.cyan(n.__filepath__)}`,m),!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=R(t)?await t(e):t;Object.keys(s).forEach(i=>{o.setHeader(i,s[i])})}catch(s){W.error(`${P.default.red("[headers error]")} ${e.url}
39
+ `,s)}}async function xt(e,o,{cookies:t}){if(t)try{let r=R(t)?await t(e):t;Object.keys(r).forEach(n=>{let s=r[n];if(S(s)){let[i,c]=s;o.setCookie(n,i,c)}else o.setCookie(n,s)})}catch(r){W.error(`${P.default.red("[cookies error]")} ${e.url}
40
+ `,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"),me=f(require("chokidar"),1),Xe=require("esbuild"),Ke=f(require("fast-glob"),1),D=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 m=c.validator;Ce(s)||(R(m)?c.validator=function(d){return F(d.query,s)&&m(d)}:m?(c.validator={...m},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?R(s)?0:1/Object.keys(s).reduce((c,m)=>c+Ot(s[m]),0):1})}),t}function Ot(e){return e?Object.keys(e).length:0}var Pt=Ee(b),T=(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}load(){let{include:t,exclude:r}=this.options,n=(0,D.createFilter)(t,r,{resolve:!1});(0,Ke.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=me.default.watch(r,{ignoreInitial:!0,cwd:this.cwd});n.length>0&&n.forEach(i=>s.add(i)),s.on("add",async i=>{i=(0,D.normalizePath)(i),this.emit("mock:update",i),C("watcher:add",i)}),s.on("change",async i=>{i=(0,D.normalizePath)(i),this.emit("mock:update",i),C("watcher:change",i)}),s.on("unlink",async i=>{i=(0,D.normalizePath)(i),this.emit("mock:unlink",i),C("watcher:unlink",i)}),this.mockWatcher=s}watchDeps(){let t=[];this.depsWatcher=me.default.watch([],{ignoreInitial:!0,cwd:this.cwd}),this.depsWatcher.on("change",r=>{r=(0,D.normalizePath)(r);let n=this.moduleDeps.get(r);n&&n.forEach(s=>{this.emit("mock:update",s)})}),this.depsWatcher.on("unlink",r=>{r=(0,D.normalizePath)(r),this.moduleDeps.delete(r)}),this.on("update:deps",()=>{let r=[];for(let[s]of this.moduleDeps.entries())r.push(s);let n=r.filter(s=>!t.includes(s));n.length>0&&this.depsWatcher.add(n)})}close(){var t,r;(t=this.mockWatcher)==null||t.close(),(r=this.depsWatcher)==null||r.close()}updateMockList(){this._mockData=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(m=>i[m]);S(c)?c.forEach(m=>m.__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 T.extensions?s:".js",m=T.extensions[c];T.extensions[c]=(M,h)=>{h===i?M._compile(r,h):m(M,h)},delete T.cache[T.resolve(t)];let d=T(t);return T.extensions[c]=m,d.__esModule?d:{default:d}}}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 de=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 E;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},m=(a,u)=>{let p=a.get(u);return!p&&a.set(u,p=new et.WebSocketServer({noServer:!0})),p},d=(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){W.error(`${Ze.default.red("[websocket server error]")} ${g}
41
+ `,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),y.forEach(({ws:j})=>j.removeAllListeners()),u.removeAllListeners(),M(a,u,p,w,l,k),y.forEach(({ws:j,req:I})=>h(u,j,I,y))};(E=e.on)==null||E.call(e,"mock:update-end",a=>{if(!n.has(a))return;let u=n.get(a);if(u)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,de.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 j=w.__filepath__;d(j,y);let I=c(y),L=m(I,l),_=i.get(L);if(!_){let x=[],ve={onCleanup:ot=>x.push(ot)};_={cleanupList:x,context:ve,connectionList:[]},i.set(L,_),M(I,L,w,ve,l,j)}let v=a,he=new Ye.default(a,a,r),{query:tt}=(0,de.parse)(a.headers.referer||"",!0);v.query=k,v.refererQuery=tt,v.params=N(y,l),v.getCookie=he.get.bind(he),L.handleUpgrade(v,u,p,x=>{C(`websocket-mock: ${a.url} connected`),_.connectionList.push({req:v,ws:x}),h(L,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});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:m}=V(e.server.proxy||{}),d=O(o.prefix);return ke(c,t,O(o.wsPrefix),o.cookiesOptions),pe(c,{formidableOptions:o.formidableOptions,proxies:[...d,...m],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 m={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},d=[Rt(m)];return m.build&&d.push(jt(m)),d}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 Fe(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
@@ -442,7 +442,7 @@ declare class MockLoader extends EventEmitter {
442
442
  private _mockData;
443
443
  constructor(options: MockLoaderOptions);
444
444
  get mockData(): Record<string, MockOptions>;
445
- load(): Promise<void>;
445
+ load(): void;
446
446
  private watchMockEntry;
447
447
  /**
448
448
  * 监听 mock文件依赖的本地文件变动,
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
- import Fe from"fs";import Q from"fs/promises";import L from"path";import{build as $e}from"esbuild";import He from"fast-glob";import _e from"is-core-module";import{createFilter as Ue,normalizePath as Ne}from"vite";var re="vite-plugin-mock-dev-server",ne="1.1.7";import se from"fs/promises";import Re from"path";import Ce from"json5";var q={name:"externalize-deps",setup(t){t.onResolve({filter:/.*/},({path:o})=>{if(o[0]!=="."&&!Re.isAbsolute(o))return{external:!0}})}},A={name:"json5-loader",setup(t){t.onLoad({filter:/\.json5$/},async({path:o})=>{let e=await se.readFile(o,"utf-8");return{contents:`export default ${JSON.stringify(Ce.parse(e))}`,loader:"js"}})}},B={name:"json-loader",setup(t){t.onLoad({filter:/\.json$/},async({path:o})=>({contents:`export default ${await se.readFile(o,"utf-8")}`,loader:"js"}))}},J=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:s,replacement:n}=r;return{path:(await o.resolve(e.replace(s,n),{kind:"import-statement",resolveDir:n,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 We}from"url";import Ee from"debug";import{match as Ie}from"path-to-regexp";import ie from"picocolors";var S=t=>Array.isArray(t),C=t=>typeof t=="function",Le=t=>Object.prototype.toString.call(t)==="[object Object]",ce=t=>Le(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 ue(t){return V.dirname(We(t))}var D=Ee("vite:plugin-mock-dev-server"),P=t=>S(t)?t:t==null?[]:[t],I={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 s of o){let n=V.join(t,s);if(K.existsSync(n)&&K.statSync(n).isFile()){let i=e!=null&&e.pathOnly?n:K.readFileSync(n,"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 z=(t={})=>{let o=[],e=[];return Object.keys(t).forEach(r=>{var n,i;let s=t[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):e.push(r)}),{httpProxies:o,wsProxies:e}};function G(t,o){return t[0]==="^"&&new RegExp(t).test(o)||o.startsWith(t)}function $(t,o){return(Ie(t,{decode:decodeURIComponent})(o)||{params:{}}).params||{}}async function le(t,o,e){let r=P(e.include),s=P(e.exclude),n={};if(o.define)for(let f in o.define){let l=o.define[f];n[f]=typeof l=="string"?l:JSON.stringify(l)}let{httpProxies:i}=z(o.server.proxy||{});i.push(...P(e.prefix));let c=P(e.wsPrefix),a={};try{let f=F(o.root,["package.json"]);f&&(a=JSON.parse(f))}catch{}let p=e.build.dist,m=await Je(process.cwd(),r,s),u=L.join(o.root,`mock-data-${Date.now()}.js`);await Q.writeFile(u,m,"utf-8");let{code:b,deps:h}=await ze(u,n,o.resolve.alias),k=qe(h);await Q.unlink(u);let g=[{filename:L.join(p,"mock-data.js"),source:b},{filename:L.join(p,"index.js"),source:Be(i,c,e.cookiesOptions,e.build.serverPort)},{filename:L.join(p,"package.json"),source:Ae(a,k)}];try{if(L.isAbsolute(p)){await Q.rm(p,{recursive:!0}),Fe.mkdirSync(p,{recursive:!0});for(let{filename:f,source:l}of g)await Q.writeFile(f,l,"utf-8")}else for(let{filename:f,source:l}of g)t.emitFile({type:"asset",fileName:f,source:l})}catch{}}function qe(t){let o=new Set,e=[re,"connect","cors"];return Object.keys(t).forEach(r=>{t[r].imports.filter(n=>n.external).map(n=>n.path).forEach(n=>{!e.includes(n)&&!_e(n)&&o.add(n)})}),Array.from(o)}function Ae(t,o){let{dependencies:e={},devDependencies:r={}}=t,s={...e,...r},n={name:"mock-server",type:"module",scripts:{start:"node index.js"},dependencies:{connect:"^3.7.0","vite-plugin-mock-dev-server":`^${ne}`,cors:"^2.8.5"},pnpm:{peerDependencyRules:{ignoreMissing:["vite"]}}};return o.forEach(i=>{n.dependencies[i]=s[i]||"latest"}),JSON.stringify(n,null,2)}function Be(t,o,e={},r=8080){return`import { createServer } from 'node:http';
4
- import connect from 'connect';
1
+ import Ne from"fs";import X from"fs/promises";import T 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.9";import ae from"fs/promises";import Ee from"path";import Ie 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(Ie.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})=>Le(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 Le(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 _e}from"url";import $e from"debug";import{match as Fe}from"path-to-regexp";import pe from"picocolors";var S=t=>Array.isArray(t),j=t=>typeof t=="function",Te=t=>Object.prototype.toString.call(t)==="[object Object]",le=t=>Te(t)&&Object.keys(t).length===0,He=t=>t!==null&&typeof t=="object"&&typeof t.pipe=="function",ue=t=>He(t)&&t.readable!==!1&&typeof t._read=="function"&&typeof t._readableState=="object";function me(t){return new Promise(o=>setTimeout(o,t))}function de(t){return Y.dirname(_e(t))}var C=$e("vite:plugin-mock-dev-server"),O=t=>S(t)?t:t==null?[]:[t],W={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(Fe(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 u=o.define[p];s[p]=typeof u=="string"?u:JSON.stringify(u)}let{httpProxies:i}=G(o.server.proxy||{});i.push(...O(e.prefix));let c=O(e.wsPrefix),m={};try{let p=H(o.root,["package.json"]);p&&(m=JSON.parse(p))}catch{}let d=e.build.dist,v=await Xe(process.cwd(),r,n),y=T.join(o.root,`mock-data-${Date.now()}.js`);await X.writeFile(y,v,"utf-8");let{code:F,deps:D}=await Ke(y,s,o.resolve.alias),a=ze(D);await X.unlink(y);let l=[{filename:T.join(d,"mock-data.js"),source:F},{filename:T.join(d,"index.js"),source:Qe(i,c,e.cookiesOptions,e.build.serverPort)},{filename:T.join(d,"package.json"),source:Ge(m,a)}];try{if(T.isAbsolute(d)){await X.rm(d,{recursive:!0}),Ne.mkdirSync(d,{recursive:!0});for(let{filename:p,source:u}of l)await X.writeFile(p,u,"utf-8")}else for(let{filename:p,source:u}of l)t.emitFile({type:"asset",fileName:p,source:u})}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
+ import connect from 'connect';
5
5
  import corsMiddleware from 'cors';
6
6
  import { baseMiddleware, mockWebSocket } from 'vite-plugin-mock-dev-server';
7
7
  import mockData from './mock-data.js';
@@ -24,18 +24,18 @@ app.use(baseMiddleware({ mockData }, {
24
24
  server.listen(${r});
25
25
 
26
26
  console.log('listen: http://localhost:${r}');
27
- `}async function Je(t,o,e){let r=await He(o,{cwd:t}),s=Ue(o,e,{resolve:!1}),n=r.filter(s),i="",c="";return n.forEach((a,p)=>{let m=Ne(L.join(t,a));i+=`import * as m${p} from '${m}';
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((m,d)=>{let v=Je(T.join(t,m));i+=`import * as m${d} from '${v}';
28
+ `,c+=`m${d}, `}),`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
32
32
  ? raw.default
33
33
  : Object.keys(raw || {}).map((key) => raw[key])
34
- )
35
- export default transformMockData(mockList);
36
- `}async function ze(t,o,e){var r;try{let s=await $e({entryPoints:[t],outfile:"out.js",write:!1,target:["node14.18","node16"],platform:"node",bundle:!0,metafile:!0,format:"esm",define:o,plugins:[J(e),q,A,B]});return{code:s.outputFiles[0].text,deps:((r=s.metafile)==null?void 0:r.inputs)||{}}}catch(s){console.error(s)}return{code:"",deps:{}}}import{Buffer as fe}from"buffer";import{parse as ke}from"url";import Xe from"cookies";import Ke from"http-status";import*as H from"mime-types";import{pathToRegexp as ye}from"path-to-regexp";import _ from"picocolors";import Y from"co-body";import Ge from"formidable";async function me(t,o){var s;let e=t.method.toUpperCase();if(["GET","DELETE","HEAD"].includes(e))return;let r=((s=t.headers["content-type"])==null?void 0:s.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 Qe(t,o)}catch(n){console.error(n)}}async function Qe(t,o){let e=Ge(o);return new Promise((r,s)=>{e.parse(t,(n,i,c)=>{if(n){s(n);return}r({...i,...c})})})}function de(t,o){return W(t.headers,o.headers)&&W(t.body,o.body)&&W(t.params,o.params)&&W(t.query,o.query)&&W(t.refererQuery,o.refererQuery)}function W(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(s,n,i){let c=Date.now(),{query:a,pathname:p}=ke(s.url,!0);if(!p||e.length===0||!e.some(j=>G(j,s.url)))return i();let m=t.mockData,u=Object.keys(m).find(j=>ye(j).test(p));if(!u)return i();let{query:b}=ke(s.headers.referer||"",!0),h=await me(s,o),k=new Xe(s,n,r),g=k.get.bind(k),f=s.method.toUpperCase(),l=Ve(m[u],{pathname:p,method:f,request:{query:a,refererQuery:b,body:h,headers:s.headers,getCookie:g}});if(!l)return i();D("middleware: ",f,s.url);let v=s,y=n;v.body=h,v.query=a,v.refererQuery=b,v.params=$(l.url,p),v.getCookie=g,y.setCookie=k.set.bind(k);let{body:M,delay:d,type:x="json",response:R,status:T=200,statusText:je}=l;if(Z(y,T,je),await Ye(v,y,l),await Ze(v,y,l),M){try{let j=C(M)?await M(v):M;await ge(c,d),et(y,j,x)}catch(j){I.error(`${_.red("[body error]")} ${s.url}
37
- `,j),Z(y,500),n.end("")}return}if(R){try{await ge(c,d),await R(v,y,i)}catch(j){I.error(`${_.red("[response error]")} ${s.url}
38
- `,j),Z(y,500),n.end("")}return}n.end("")}}function Ve(t,{pathname:o,method:e,request:r}){return t.find(s=>{if(!o||!s||!s.url||s.ws===!0||!(s.method?S(s.method)?s.method:[s.method]:["GET","POST"]).includes(e))return!1;let i=ye(s.url).test(o);if(i&&s.validator){let c=$(s.url,o);if(C(s.validator))return s.validator({params:c,...r});try{return de({params:c,...r},s.validator)}catch(a){return I.error(`${_.red("[validator error]")} ${o}
39
- `,a),!1}}return i})}function Z(t,o=200,e){t.statusCode=o,t.statusMessage=e||tt(o)}async function Ye(t,o,{headers:e,type:r="json"}){let s=H.contentType(r)||H.contentType(H.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"),!!e)try{let n=C(e)?await e(t):e;Object.keys(n).forEach(i=>{o.setHeader(i,n[i])})}catch(n){I.error(`${_.red("[headers error]")} ${t.url}
40
- `,n)}}async function Ze(t,o,{cookies:e}){if(e)try{let r=C(e)?await e(t):e;Object.keys(r).forEach(s=>{let n=r[s];if(S(n)){let[i,c]=n;o.setCookie(s,i,c)}else o.setCookie(s,n)})}catch(r){I.error(`${_.red("[cookies error]")} ${t.url}
41
- `,r)}}function et(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 tt(t){return Ke[t]||"Unknown"}import nt from"events";import ee from"fs";import{createRequire as st}from"module";import Me from"path";import{pathToFileURL as it}from"url";import be from"chokidar";import{build as ct}from"esbuild";import at from"fast-glob";import{createFilter as pt,normalizePath as N}from"vite";import{parse as ot}from"url";import rt from"lodash.sortby";function ve(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:s,query:n}=ot(r.url,!0),i=e[s]??(e[s]=[]),c={...r,url:s};if(c.ws!==!0){let a=c.validator;ce(n)||(C(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(e).forEach(r=>{e[r]=rt(e[r],s=>{if(s.ws===!0)return 0;let{validator:n}=s;if(!n)return 1;if(C(n))return 0;let{query:i,params:c,headers:a,body:p,refererQuery:m}=n;return 1/(U(i)+U(c)+U(a)+U(p)+U(m))})}),e}function U(t){return t?Object.keys(t).length:0}var ut=ue(import.meta.url),E=st(ut),X=class extends nt{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,s=await at(e,{cwd:this.cwd}),n=pt(e,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:e}=this.options,[r,...s]=e,n=be.watch(r,{ignoreInitial:!0,cwd:this.cwd});s.length>0&&s.forEach(i=>n.add(i)),n.on("add",async i=>{i=N(i),this.emit("mock:update",i),D("watcher:add",i)}),n.on("change",async i=>{i=N(i),this.emit("mock:update",i),D("watcher:change",i)}),n.on("unlink",async i=>{i=N(i),this.emit("mock:unlink",i),D("watcher:unlink",i)}),this.mockWatcher=n}watchDeps(){let e=[];this.depsWatcher=be.watch([],{ignoreInitial:!0,cwd:this.cwd}),this.depsWatcher.on("change",r=>{r=N(r);let s=this.moduleDeps.get(r);s&&s.forEach(n=>{this.emit("mock:update",n)})}),this.depsWatcher.on("unlink",r=>{r=N(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=>!e.includes(n));s.length>0&&this.depsWatcher.add(s)})}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(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(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:s,deps:n}=await this.transformWithEsbuild(e,r);try{let i=await this.loadFromCode(e,s,r),c=i&&i.default?i.default:Object.keys(i||{}).map(a=>i[a]);S(c)?c.forEach(a=>a.__filepath__=e):c.__filepath__=e,this.moduleCache.set(e,c),this.updateModuleDeps(e,n)}catch(i){console.error(i)}}async loadFromCode(e,r,s){if(s){let n=`${e}.timestamp-${Date.now()}`,i=`${n}.mjs`,c=`${it(n)}.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 n=Me.extname(e),i=ee.realpathSync(e),c=n in E.extensions?n:".js",a=E.extensions[c];E.extensions[c]=(m,u)=>{u===i?m._compile(r,u):a(m,u)},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 s;try{let n=await ct({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:[J(this.options.alias),q,B,A]});return{code:n.outputFiles[0].text,deps:((s=n.metafile)==null?void 0:s.inputs)||{}}}catch(n){console.error(n)}return{code:"",deps:{}}}};import{parse as xe}from"url";import lt from"cookies";import{pathToRegexp as we}from"path-to-regexp";import{WebSocketServer as mt}from"ws";function Se(t,o,e,r){var c;let s=new Set,n=new Map,i=new Map;(c=t.on)==null||c.call(t,"mock:update-end",a=>{if(!s.has(a))return;let p={};for(let[m,u]of i.entries())t.mockData[m].forEach(b=>{b.ws&&b.__filepath__===a&&u.forEach(({pathname:h,req:k,ws:g})=>{p[h]??(p[h]={mock:b,list:[],mockUrl:m}),p[h].list.push({req:k,ws:g})})});Object.keys(p).forEach(m=>{var l;let{wss:u,cleanupList:b,context:h}=n.get(m),{mock:k,list:g,mockUrl:f}=p[m];Oe(b),u.removeAllListeners(),(l=k.setup)==null||l.call(k,u,h),u.on("close",()=>n.delete(m)),g.forEach(({req:v,ws:y})=>{y.removeAllListeners(),u.emit("connection",y,v),y.on("close",()=>{let M=i.get(f),d=(M==null?void 0:M.findIndex(x=>x.ws===y))||-1;d!==-1&&(M==null||M.splice(d,1))})})})}),o==null||o.on("upgrade",(a,p,m)=>{var M;let{pathname:u,query:b}=xe(a.url,!0);if(!u||e.length===0||!e.some(d=>G(d,a.url)))return;let h=t.mockData,k=Object.keys(h).find(d=>we(d).test(u));if(!k)return;let g=h[k].find(d=>d.url&&d.ws&&we(d.url).test(u));if(!g)return;s.add(g.__filepath__);let f=n.get(u);if(!f){let d=new mt({noServer:!0}),x=[],R={onCleanup:T=>x.push(T)};(M=g.setup)==null||M.call(g,d,R),d.on("close",()=>n.delete(u)),n.set(u,f={wss:d,cleanupList:x,context:R})}let l=a,v=new lt(a,a,r),{query:y}=xe(a.headers.referer||"",!0);l.query=b,l.refererQuery=y,l.params=$(k,u),l.getCookie=v.get.bind(v),f.wss.handleUpgrade(l,p,m,d=>{D(`websocket-mock: ${a.url} connected`),f.wss.emit("connection",d,l);let x=i.get(k);x||i.set(k,x=[]),x.push({req:l,ws:d,pathname:u}),d.on("close",()=>{let R=x.findIndex(T=>T.ws===d);R!==-1&&x.splice(R,1)})})}),o==null||o.on("close",()=>{n.forEach(({wss:a,cleanupList:p})=>{Oe(p),a.close()}),n.clear(),i.clear(),s.clear()})}function Oe(t){let o;for(;o=t.shift();)o==null||o()}async function te(t,o,e,r){let s=P(o.include),n=P(o.exclude),i={};if(t.define)for(let m in t.define){let u=t.define[m];i[m]=typeof u=="string"?u:JSON.stringify(u)}let c=new X({include:s,exclude:n,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}=z(t.server.proxy||{}),p=P(o.prefix);return Se(c,e,P(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:s=!1,formidableOptions:n={},build:i=!1,cookiesOptions:c={}}={}){let a={prefix:t,wsPrefix:o,include:e,exclude:r,reload:s,cookiesOptions:c,formidableOptions:{multiples:!0,...n},build:i?Object.assign({serverPort:8080,dist:"mockServer"},typeof i=="object"?i:{}):!1},p=[ft(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 le(this,o,t)}}}function ft(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:s,ws:n}){let i=await te(r,t,s,n);e.use(i)},async configurePreviewServer({middlewares:e,httpServer:r}){let s=await te(o,t,r);e.use(s)}}}function Ao(t){return t}function Bo(t){return e=>(S(e)?e=e.map(r=>t(r)||r):e=t(e)||e,e)}var Qo=Pe;export{he as baseMiddleware,Bo as createDefineMock,Qo as default,Ao as defineMock,Pe as mockDevServerPlugin,Se as mockWebSocket,ve as transformMockData};
34
+ );
35
+ export default transformMockData(mockList);`}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 R 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.headers,o.headers)&&_(t.body,o.body)&&_(t.params,o.params)&&_(t.query,o.query)&&_(t.refererQuery,o.refererQuery)}function _(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:m,pathname:d}=he(n.url,!0);if(!d||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(d));if(!y)return i();let{query:F}=he(n.headers.referer||"",!0),D=await ke(n,o),a=new Ze(n,s,r),l=a.get.bind(a),p=n.method.toUpperCase(),u=tt(v[y],{pathname:d,method:p,request:{query:m,refererQuery:F,body:D,headers:n.headers,getCookie:l}});if(!u)return i();C("middleware: ",p,n.url);let f=n,k=s;f.body=D,f.query=m,f.refererQuery=F,f.params=N(u.url,d),f.getCookie=l,k.setCookie=a.set.bind(a);let{body:g,delay:w,type:P="json",response:E,status:I=200,statusText:L}=u;if(ee(k,I,L),await ot(f,k,u),await rt(f,k,u),g){try{let h=j(g)?await g(f):g;await ve(c,w),nt(k,h,P)}catch(h){W.error(`${R.red("[body error]")} ${n.url}
36
+ `,`file: ${R.cyan(u.__filepath__)}`,h),ee(k,500),s.end("")}return}if(E){try{await ve(c,w),await E(f,k,i)}catch(h){W.error(`${R.red("[response error]")} ${n.url}
37
+ `,`file: ${R.cyan(u.__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(j(n.validator))return n.validator({params:c,...r});try{return ge({params:c,...r},n.validator)}catch(m){return W.error(`${R.red("[validator error]")} ${o}
38
+ `,`file: ${R.cyan(n.__filepath__)}`,m),!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=j(e)?await e(t):e;Object.keys(s).forEach(i=>{o.setHeader(i,s[i])})}catch(s){W.error(`${R.red("[headers error]")} ${t.url}
39
+ `,s)}}async function rt(t,o,{cookies:e}){if(e)try{let r=j(e)?await e(t):e;Object.keys(r).forEach(n=>{let s=r[n];if(S(s)){let[i,c]=s;o.setCookie(n,i,c)}else o.setCookie(n,s)})}catch(r){W.error(`${R.red("[cookies error]")} ${t.url}
40
+ `,r)}}function nt(t,o,e){if(ue(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 me(r)}function st(t){return et[t]||"Unknown"}import pt from"events";import te from"fs";import{createRequire as lt}from"module";import we from"path";import{pathToFileURL as ut}from"url";import Se from"chokidar";import{build as mt}from"esbuild";import dt 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 m=c.validator;le(s)||(j(m)?c.validator=function(d){return _(d.query,s)&&m(d)}:m?(c.validator={...m},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?j(s)?0:1/Object.keys(s).reduce((c,m)=>c+at(s[m]),0):1})}),e}function at(t){return t?Object.keys(t).length:0}var kt=de(import.meta.url),$=lt(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}load(){let{include:e,exclude:r}=this.options,n=ft(e,r,{resolve:!1});dt(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=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),C("watcher:add",i)}),s.on("change",async i=>{i=A(i),this.emit("mock:update",i),C("watcher:change",i)}),s.on("unlink",async i=>{i=A(i),this.emit("mock:unlink",i),C("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(m=>i[m]);S(c)?c.forEach(m=>m.__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=`${ut(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",m=$.extensions[c];$.extensions[c]=(v,y)=>{y===i?v._compile(r,y):m(v,y)},delete $.cache[$.resolve(e)];let d=$(e);return $.extensions[c]=m,d.__esModule?d:{default:d}}}async transformWithEsbuild(e,r){var n;try{let s=await mt({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 D;let n=new Map,s=new Map,i=new WeakMap,c=a=>{let l=s.get(a);return!l&&s.set(a,l=new Map),l},m=(a,l)=>{let p=a.get(l);return!p&&a.set(l,p=new ht({noServer:!0})),p},d=(a,l)=>{let p=n.get(a);!p&&n.set(a,p=new Set),p.add(l)},v=(a,l,p,u,f,k)=>{var g;try{(g=p.setup)==null||g.call(p,l,u),l.on("close",()=>{a.delete(f)})}catch(w){W.error(`${yt.red("[websocket server error]")} ${k}
41
+ `,w)}},y=(a,l,p,u)=>{a.emit("connection",l,p),l.on("close",()=>{let f=u.findIndex(k=>k.ws===l);f!==-1&&u.splice(f,1)})},F=(a,l,p,u,f)=>{let{cleanupList:k,connectionList:g,context:w}=i.get(l);je(k),g.forEach(({ws:P})=>P.removeAllListeners()),l.removeAllListeners(),v(a,l,p,w,u,f),g.forEach(({ws:P,req:E})=>y(l,P,E,g))};(D=t.on)==null||D.call(t,"mock:update-end",a=>{if(!n.has(a))return;let l=n.get(a);if(l)for(let p of l.values())for(let u of t.mockData[p]){if(!u.ws||u.__filepath__!==a)return;let f=c(p);for(let[k,g]of f.entries())F(f,g,u,k,a)}}),o==null||o.on("upgrade",(a,l,p)=>{let{pathname:u,query:f}=Oe(a.url,!0);if(!u||e.length===0||!e.some(M=>Q(M,a.url)))return;let k=t.mockData,g=Object.keys(k).find(M=>Pe(M).test(u));if(!g)return;let w=k[g].find(M=>M.url&&M.ws&&Pe(M.url).test(u));if(!w)return;let P=w.__filepath__;d(P,g);let E=c(g),I=m(E,u),L=i.get(I);if(!L){let M=[],ne={onCleanup:De=>M.push(De)};L={cleanupList:M,context:ne,connectionList:[]},i.set(I,L),v(E,I,w,ne,u,P)}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,u),h.getCookie=re.get.bind(re),I.handleUpgrade(h,l,p,M=>{C(`websocket-mock: ${a.url} connected`),L.connectionList.push({req:h,ws:M}),y(I,M,h,L.connectionList)})}),o==null||o.on("close",()=>{for(let a of s.values()){for(let l of a.values()){let p=i.get(l);je(p.cleanupList),l.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});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:m}=G(t.server.proxy||{}),d=O(o.prefix);return Ce(c,e,O(o.wsPrefix),o.cookiesOptions),be(c,{formidableOptions:o.formidableOptions,proxies:[...d,...m],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 m={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},d=[Mt(m)];return m.build&&d.push(vt(m)),d}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.7",
3
+ "version": "1.1.9",
4
4
  "keywords": [
5
5
  "vite",
6
6
  "plugin",