vite-plugin-mock-dev-server 1.1.10 → 1.1.11
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 +2 -2
- package/dist/index.js +2 -2
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";var nt=Object.create;var J=Object.defineProperty;var st=Object.getOwnPropertyDescriptor;var it=Object.getOwnPropertyNames;var ct=Object.getPrototypeOf,at=Object.prototype.hasOwnProperty;var pt=(e,o)=>{for(var t in o)J(e,t,{get:o[t],enumerable:!0})},Me=(e,o,t,r)=>{if(o&&typeof o=="object"||typeof o=="function")for(let n of it(o))!at.call(e,n)&&n!==t&&J(e,n,{get:()=>o[n],enumerable:!(r=st(o,n))||r.enumerable});return e};var f=(e,o,t)=>(t=e!=null?nt(ct(e)):{},Me(o||!e||!e.__esModule?J(t,"default",{value:e,enumerable:!0}):t,e)),ut=e=>Me(J({},"__esModule",{value:!0}),e);var Lt={};pt(Lt,{baseMiddleware:()=>ue,createDefineMock:()=>Et,default:()=>It,defineMock:()=>Dt,mockDevServerPlugin:()=>he,mockWebSocket:()=>ge,transformMockData:()=>le});module.exports=ut(Lt);var lt=()=>typeof document>"u"?new URL("file:"+__filename).href:document.currentScript&&document.currentScript.src||new URL("main.js",document.baseURI).href,b=lt();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),ee=require("vite");var xe="vite-plugin-mock-dev-server",we="1.1.
|
|
1
|
+
"use strict";var nt=Object.create;var J=Object.defineProperty;var st=Object.getOwnPropertyDescriptor;var it=Object.getOwnPropertyNames;var ct=Object.getPrototypeOf,at=Object.prototype.hasOwnProperty;var pt=(e,o)=>{for(var t in o)J(e,t,{get:o[t],enumerable:!0})},Me=(e,o,t,r)=>{if(o&&typeof o=="object"||typeof o=="function")for(let n of it(o))!at.call(e,n)&&n!==t&&J(e,n,{get:()=>o[n],enumerable:!(r=st(o,n))||r.enumerable});return e};var f=(e,o,t)=>(t=e!=null?nt(ct(e)):{},Me(o||!e||!e.__esModule?J(t,"default",{value:e,enumerable:!0}):t,e)),ut=e=>Me(J({},"__esModule",{value:!0}),e);var Lt={};pt(Lt,{baseMiddleware:()=>ue,createDefineMock:()=>Et,default:()=>It,defineMock:()=>Dt,mockDevServerPlugin:()=>he,mockWebSocket:()=>ge,transformMockData:()=>le});module.exports=ut(Lt);var lt=()=>typeof document>"u"?new URL("file:"+__filename).href:document.currentScript&&document.currentScript.src||new URL("main.js",document.baseURI).href,b=lt();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),ee=require("vite");var xe="vite-plugin-mock-dev-server",we="1.1.11";var ne=f(require("fs/promises"),1),Se=f(require("path"),1),Oe=f(require("json5"),1),z={name:"externalize-deps",setup(e){e.onResolve({filter:/.*/},({path:o})=>{if(o[0]!=="."&&!Se.default.isAbsolute(o))return{external:!0}})}},G={name:"json5-loader",setup(e){e.onLoad({filter:/\.json5$/},async({path:o})=>{let t=await ne.default.readFile(o,"utf-8");return{contents:`export default ${JSON.stringify(Oe.default.parse(t))}`,loader:"js"}})}},Q={name:"json-loader",setup(e){e.onLoad({filter:/\.json$/},async({path:o})=>({contents:`export default ${await ne.default.readFile(o,"utf-8")}`,loader:"js"}))}},X=e=>({name:"alias-plugin",setup(o){o.onResolve({filter:/.*/},async({path:t})=>{let r=e.find(({find:c})=>mt(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 mt(e,o){return e instanceof RegExp?e.test(o):o.length<e.length?!1:o===e?!0:o.startsWith(`${e}/`)}var Y=f(require("fs"),1),K=f(require("path"),1),Ce=require("url"),Pe=f(require("debug"),1),je=require("path-to-regexp"),se=f(require("picocolors"),1),w=e=>Array.isArray(e),j=e=>typeof e=="function",dt=e=>Object.prototype.toString.call(e)==="[object Object]",Re=e=>dt(e)&&Object.keys(e).length===0,ft=e=>e!==null&&typeof e=="object"&&typeof e.pipe=="function",We=e=>ft(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,Ce.fileURLToPath)(e))}var R=(0,Pe.default)("vite:plugin-mock-dev-server"),O=e=>w(e)?e:e==null?[]:[e],W={info(...e){console.info(se.default.cyan("mock-dev-server: "),...e)},error(...e){console.error(`
|
|
2
2
|
`,se.default.cyan("mock-dev-server: "),...e,`
|
|
3
3
|
`)}};function A(e,o,t){for(let n of o){let s=K.default.join(e,n);if(Y.default.existsSync(s)&&Y.default.statSync(s).isFile()){let i=t!=null&&t.pathOnly?s:Y.default.readFileSync(s,"utf-8");if(!(t!=null&&t.predicate)||t.predicate(i))return i}}let r=K.default.dirname(e);if(r!==e&&(!(t!=null&&t.rootDir)||r.startsWith(t==null?void 0:t.rootDir)))return A(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 Z(e,o){return e[0]==="^"&&new RegExp(e).test(o)||o.startsWith(e)}function N(e,o){return((0,je.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 m=o.define[p];s[p]=typeof m=="string"?m:JSON.stringify(m)}let{httpProxies:i}=V(o.server.proxy||{});i.push(...O(t.prefix));let c=O(t.wsPrefix),l={};try{let p=A(o.root,["package.json"]);p&&(l=JSON.parse(p))}catch{}let d=t.build.dist,M=await ht(process.cwd(),r,n),v=$.default.join(o.root,`mock-data-${Date.now()}.js`);await q.default.writeFile(v,M,"utf-8");let{code:H,deps:E}=await vt(v,s,o.resolve.alias),a=kt(E);await q.default.unlink(v);let u=[{filename:$.default.join(d,"mock-data.js"),source:H},{filename:$.default.join(d,"index.js"),source:yt(i,c,t.cookiesOptions,t.build.serverPort)},{filename:$.default.join(d,"package.json"),source:gt(l,a)}];try{if($.default.isAbsolute(d)){await q.default.rm(d,{recursive:!0}),Ie.default.mkdirSync(d,{recursive:!0});for(let{filename:p,source:m}of u)await q.default.writeFile(p,m,"utf-8")}else for(let{filename:p,source:m}of u)e.emitFile({type:"asset",fileName:p,source:m})}catch{}}function kt(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 gt(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 yt(e,o,t={},r=8080){return`import { createServer } from 'node:http';
|
|
4
4
|
import connect from 'connect';
|
|
@@ -47,5 +47,5 @@ export default transformMockData(mockList);`}async function vt(e,o,t){var r;try{
|
|
|
47
47
|
`,`file: ${C.default.cyan(m.__filepath__)}`,h),ie(g,500),s.end("")}return}s.end("")}}function xt(e,{pathname:o,method:t,request:r}){return e.find(n=>{if(!o||!n||!n.url||n.ws===!0||!(n.method?w(n.method)?n.method:[n.method]:["GET","POST"]).includes(t))return!1;let i=(0,pe.pathToRegexp)(n.url).test(o);if(i&&n.validator){let c=N(n.url,o);if(j(n.validator))return n.validator({params:c,...r});try{return Ue({params:c,...r},n.validator)}catch(l){return W.error(`${C.default.red("[validator error]")} ${o}
|
|
48
48
|
`,`file: ${C.default.cyan(n.__filepath__)}`,l),!1}}return i})}function ie(e,o=200,t){e.statusCode=o,e.statusMessage=t||Ct(o)}async function wt(e,o,{headers:t,type:r="json"}){let n=B.contentType(r)||B.contentType(B.lookup(r)||"");if(n&&o.setHeader("Content-Type",n),o.setHeader("Cache-Control","no-cache,max-age=0"),o.setHeader("X-Mock","generate by vite:plugin-mock-dev-server"),!!t)try{let s=j(t)?await t(e):t;Object.keys(s).forEach(i=>{o.setHeader(i,s[i])})}catch(s){W.error(`${C.default.red("[headers error]")} ${e.url}
|
|
49
49
|
`,s)}}async function St(e,o,{cookies:t}){if(t)try{let r=j(t)?await t(e):t;Object.keys(r).forEach(n=>{let s=r[n];if(w(s)){let[i,c]=s;o.setCookie(n,i,c)}else o.setCookie(n,s)})}catch(r){W.error(`${C.default.red("[cookies error]")} ${e.url}
|
|
50
|
-
`,r)}}function Ot(e,o,t){if(We(o))o.pipe(e);else if(ce.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"?ce.Buffer.from(r):r)}}async function Ae(e,o){if(!o||o<=0)return;let t=Date.now()-e,r=o-t;r>0&&await De(r)}function Ct(e){return qe.default[e]||"Unknown"}var Ge=f(require("events"),1),oe=f(require("fs"),1),Qe=require("module"),me=f(require("path"),1),Xe=require("url"),de=f(require("chokidar"),1),Ye=require("esbuild"),Ke=f(require("fast-glob"),1),D=require("vite");var Je=require("url"),ze=f(require("lodash.sortby"),1);function le(e){let o=[];for(let[,r]of e.entries())r&&(w(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,Je.parse)(r.url,!0),i=t[n]??(t[n]=[]),c={...r,url:n};if(c.ws!==!0){let l=c.validator;Re(s)||(j(l)?c.validator=function(d){return F(d.query,s)&&l(d)}:l?(c.validator={...l},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,ze.default)(t[r],n=>{if(n.ws===!0)return 0;let{validator:s}=n;return s?j(s)?0:1/Object.keys(s).reduce((c,l)=>c+Pt(s[l]),0):
|
|
50
|
+
`,r)}}function Ot(e,o,t){if(We(o))o.pipe(e);else if(ce.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"?ce.Buffer.from(r):r)}}async function Ae(e,o){if(!o||o<=0)return;let t=Date.now()-e,r=o-t;r>0&&await De(r)}function Ct(e){return qe.default[e]||"Unknown"}var Ge=f(require("events"),1),oe=f(require("fs"),1),Qe=require("module"),me=f(require("path"),1),Xe=require("url"),de=f(require("chokidar"),1),Ye=require("esbuild"),Ke=f(require("fast-glob"),1),D=require("vite");var Je=require("url"),ze=f(require("lodash.sortby"),1);function le(e){let o=[];for(let[,r]of e.entries())r&&(w(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,Je.parse)(r.url,!0),i=t[n]??(t[n]=[]),c={...r,url:n};if(c.ws!==!0){let l=c.validator;Re(s)||(j(l)?c.validator=function(d){return F(d.query,s)&&l(d)}:l?(c.validator={...l},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,ze.default)(t[r],n=>{if(n.ws===!0)return 0;let{validator:s}=n;return s?j(s)?0:1/Object.keys(s).reduce((c,l)=>c+Pt(s[l]),0):2})}),t}function Pt(e){return e?Object.keys(e).length:0}var jt=Ee(b),T=(0,Qe.createRequire)(jt),re=class extends Ge.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,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=de.default.watch(r,{ignoreInitial:!0,cwd:this.cwd});n.length>0&&n.forEach(i=>s.add(i)),s.on("add",async i=>{i=(0,D.normalizePath)(i),this.emit("mock:update",i),R("watcher:add",i)}),s.on("change",async i=>{i=(0,D.normalizePath)(i),this.emit("mock:update",i),R("watcher:change",i)}),s.on("unlink",async i=>{i=(0,D.normalizePath)(i),this.emit("mock:unlink",i),R("watcher:unlink",i)}),this.mockWatcher=s}watchDeps(){let t=[];this.depsWatcher=de.default.watch([],{ignoreInitial:!0,cwd:this.cwd}),this.depsWatcher.on("change",r=>{r=(0,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=le(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(l=>{w(i[l])?c.push(...i[l]):c.push(i[l])})),w(c)?c.forEach(l=>l.__filepath__=t):c.__filepath__=t,this.moduleCache.set(t,c),this.updateModuleDeps(t,s)}catch(i){console.error(i)}}async loadFromCode(t,r,n){if(n){let s=`${t}.timestamp-${Date.now()}`,i=`${s}.mjs`,c=`${(0,Xe.pathToFileURL)(s)}.mjs`;await oe.default.promises.writeFile(i,r,"utf8");try{return await import(c)}finally{try{oe.default.unlinkSync(i)}catch{}}}else{t=me.default.resolve(this.cwd,t);let s=me.default.extname(t),i=oe.default.realpathSync(t),c=s in T.extensions?s:".js",l=T.extensions[c];T.extensions[c]=(M,v)=>{v===i?M._compile(r,v):l(M,v)},delete T.cache[T.resolve(t)];let d=T(t);return T.extensions[c]=l,d.__esModule?d:{default:d}}}async transformWithEsbuild(t,r){var n;try{let s=await(0,Ye.build)({entryPoints:[t],outfile:"out.js",write:!1,target:["node14.18","node16"],platform:"node",bundle:!0,metafile:!0,format:r?"esm":"cjs",define:this.options.define,plugins:[X(this.options.alias),z,Q,G]});return{code:s.outputFiles[0].text,deps:((n=s.metafile)==null?void 0:n.inputs)||{}}}catch(s){console.error(s)}return{code:"",deps:{}}}};var fe=require("url"),Ze=f(require("cookies"),1),ke=require("path-to-regexp"),et=f(require("picocolors"),1),tt=require("ws");function ge(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},l=(a,u)=>{let p=a.get(u);return!p&&a.set(u,p=new tt.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,m,k,g)=>{var y;try{(y=p.setup)==null||y.call(p,u,m),u.on("close",()=>{a.delete(k)})}catch(S){W.error(`${et.default.red("[websocket server error]")} ${g}
|
|
51
51
|
`,S)}},v=(a,u,p,m)=>{a.emit("connection",u,p),u.on("close",()=>{let k=m.findIndex(g=>g.ws===u);k!==-1&&m.splice(k,1)})},H=(a,u,p,m,k)=>{let{cleanupList:g,connectionList:y,context:S}=i.get(u);Ve(g),y.forEach(({ws:P})=>P.removeAllListeners()),u.removeAllListeners(),M(a,u,p,S,m,k),y.forEach(({ws:P,req:I})=>v(u,P,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 m of e.mockData[p]){if(!m.ws||m.__filepath__!==a)return;let k=c(p);for(let[g,y]of k.entries())H(k,y,m,g,a)}}),o==null||o.on("upgrade",(a,u,p)=>{let{pathname:m,query:k}=(0,fe.parse)(a.url,!0);if(!m||t.length===0||!t.some(x=>Z(x,a.url)))return;let g=e.mockData,y=Object.keys(g).find(x=>(0,ke.pathToRegexp)(x).test(m));if(!y)return;let S=g[y].find(x=>x.url&&x.ws&&(0,ke.pathToRegexp)(x.url).test(m));if(!S)return;let P=S.__filepath__;d(P,y);let I=c(y),L=l(I,m),_=i.get(L);if(!_){let x=[],ve={onCleanup:rt=>x.push(rt)};_={cleanupList:x,context:ve,connectionList:[]},i.set(L,_),M(I,L,S,ve,m,P)}let h=a,U=new Ze.default(a,a,r),{query:ot}=(0,fe.parse)(a.headers.referer||"",!0);h.query=k,h.refererQuery=ot,h.params=N(y,m),h.getCookie=U.get.bind(U),L.handleUpgrade(h,u,p,x=>{R(`websocket-mock: ${a.url} connected`),_.connectionList.push({req:h,ws:x}),v(L,x,h,_.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 ye(e,o,t,r){let n=O(o.include),s=O(o.exclude),i={};if(e.define)for(let M in e.define){let v=e.define[M];i[M]=typeof v=="string"?v:JSON.stringify(v)}let c=new re({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:l}=V(e.server.proxy||{}),d=O(o.prefix);return ge(c,t,O(o.wsPrefix),o.cookiesOptions),ue(c,{formidableOptions:o.formidableOptions,proxies:[...d,...l],cookiesOptions:o.cookiesOptions})}function he({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 l={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=[Wt(l)];return l.build&&d.push(Rt(l)),d}function Rt(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 Wt(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 ye(r,e,n,s);t.use(i)},async configurePreviewServer({middlewares:t,httpServer:r}){let n=await ye(o,e,r);t.use(n)}}}function Dt(e){return e}function Et(e){return t=>(w(t)?t=t.map(r=>e(r)||r):t=e(t)||t,t)}var It=he;0&&(module.exports={baseMiddleware,createDefineMock,defineMock,mockDevServerPlugin,mockWebSocket,transformMockData});
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import Ae from"fs";import Y from"fs/promises";import T from"path";import{build as Ne}from"esbuild";import Ue from"fast-glob";import qe from"is-core-module";import{createFilter as Be,normalizePath as Je}from"vite";var ie="vite-plugin-mock-dev-server",ce="1.1.
|
|
1
|
+
import Ae from"fs";import Y from"fs/promises";import T from"path";import{build as Ne}from"esbuild";import Ue from"fast-glob";import qe from"is-core-module";import{createFilter as Be,normalizePath as Je}from"vite";var ie="vite-plugin-mock-dev-server",ce="1.1.11";import ae from"fs/promises";import Ee from"path";import Ie from"json5";var B={name:"externalize-deps",setup(t){t.onResolve({filter:/.*/},({path:o})=>{if(o[0]!=="."&&!Ee.isAbsolute(o))return{external:!0}})}},J={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"}})}},z={name:"json-loader",setup(t){t.onLoad({filter:/\.json$/},async({path:o})=>({contents:`export default ${await ae.readFile(o,"utf-8")}`,loader:"js"}))}},G=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 Z 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 w=t=>Array.isArray(t),P=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 Z.dirname(_e(t))}var j=$e("vite:plugin-mock-dev-server"),O=t=>w(t)?t:t==null?[]:[t],R={info(...t){console.info(pe.cyan("mock-dev-server: "),...t)},error(...t){console.error(`
|
|
2
2
|
`,pe.cyan("mock-dev-server: "),...t,`
|
|
3
3
|
`)}};function A(t,o,e){for(let n of o){let s=Z.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=Z.dirname(t);if(r!==t&&(!(e!=null&&e.rootDir)||r.startsWith(e==null?void 0:e.rootDir)))return A(r,o,e)}var Q=(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 X(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 m=o.define[p];s[p]=typeof m=="string"?m:JSON.stringify(m)}let{httpProxies:i}=Q(o.server.proxy||{});i.push(...O(e.prefix));let c=O(e.wsPrefix),u={};try{let p=A(o.root,["package.json"]);p&&(u=JSON.parse(p))}catch{}let d=e.build.dist,v=await Xe(process.cwd(),r,n),h=T.join(o.root,`mock-data-${Date.now()}.js`);await Y.writeFile(h,v,"utf-8");let{code:F,deps:D}=await Ye(h,s,o.resolve.alias),a=ze(D);await Y.unlink(h);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(u,a)}];try{if(T.isAbsolute(d)){await Y.rm(d,{recursive:!0}),Ae.mkdirSync(d,{recursive:!0});for(let{filename:p,source:m}of l)await Y.writeFile(p,m,"utf-8")}else for(let{filename:p,source:m}of l)t.emitFile({type:"asset",fileName:p,source:m})}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)&&!qe(s)&&o.add(s)})}),Array.from(o)}function Ge(t,o){let{dependencies:e={},devDependencies:r={}}=t,n={...e,...r},s={name:"mock-server",type:"module",scripts:{start:"node index.js"},dependencies:{connect:"^3.7.0","vite-plugin-mock-dev-server":`^${ce}`,cors:"^2.8.5"},pnpm:{peerDependencyRules:{ignoreMissing:["vite"]}}};return o.forEach(i=>{s.dependencies[i]=n[i]||"latest"}),JSON.stringify(s,null,2)}function Qe(t,o,e={},r=8080){return`import { createServer } from 'node:http';
|
|
4
4
|
import connect from 'connect';
|
|
@@ -47,5 +47,5 @@ export default transformMockData(mockList);`}async function Ye(t,o,e){var r;try{
|
|
|
47
47
|
`,`file: ${W.cyan(m.__filepath__)}`,y),te(k,500),s.end("")}return}s.end("")}}function rt(t,{pathname:o,method:e,request:r}){return t.find(n=>{if(!o||!n||!n.url||n.ws===!0||!(n.method?w(n.method)?n.method:[n.method]:["GET","POST"]).includes(e))return!1;let i=Me(n.url).test(o);if(i&&n.validator){let c=N(n.url,o);if(P(n.validator))return n.validator({params:c,...r});try{return ge({params:c,...r},n.validator)}catch(u){return R.error(`${W.red("[validator error]")} ${o}
|
|
48
48
|
`,`file: ${W.cyan(n.__filepath__)}`,u),!1}}return i})}function te(t,o=200,e){t.statusCode=o,t.statusMessage=e||ct(o)}async function nt(t,o,{headers:e,type:r="json"}){let n=U.contentType(r)||U.contentType(U.lookup(r)||"");if(n&&o.setHeader("Content-Type",n),o.setHeader("Cache-Control","no-cache,max-age=0"),o.setHeader("X-Mock","generate by vite:plugin-mock-dev-server"),!!e)try{let s=P(e)?await e(t):e;Object.keys(s).forEach(i=>{o.setHeader(i,s[i])})}catch(s){R.error(`${W.red("[headers error]")} ${t.url}
|
|
49
49
|
`,s)}}async function st(t,o,{cookies:e}){if(e)try{let r=P(e)?await e(t):e;Object.keys(r).forEach(n=>{let s=r[n];if(w(s)){let[i,c]=s;o.setCookie(n,i,c)}else o.setCookie(n,s)})}catch(r){R.error(`${W.red("[cookies error]")} ${t.url}
|
|
50
|
-
`,r)}}function it(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 ct(t){return et[t]||"Unknown"}import ut from"events";import oe from"fs";import{createRequire as mt}from"module";import we from"path";import{pathToFileURL as dt}from"url";import Se from"chokidar";import{build as ft}from"esbuild";import kt from"fast-glob";import{createFilter as gt,normalizePath as q}from"vite";import{parse as at}from"url";import pt from"lodash.sortby";function xe(t){let o=[];for(let[,r]of t.entries())r&&(w(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}=at(r.url,!0),i=e[n]??(e[n]=[]),c={...r,url:n};if(c.ws!==!0){let u=c.validator;le(s)||(P(u)?c.validator=function(d){return _(d.query,s)&&u(d)}:u?(c.validator={...u},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]=pt(e[r],n=>{if(n.ws===!0)return 0;let{validator:s}=n;return s?P(s)?0:1/Object.keys(s).reduce((c,u)=>c+lt(s[u]),0):
|
|
50
|
+
`,r)}}function it(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 ct(t){return et[t]||"Unknown"}import ut from"events";import oe from"fs";import{createRequire as mt}from"module";import we from"path";import{pathToFileURL as dt}from"url";import Se from"chokidar";import{build as ft}from"esbuild";import kt from"fast-glob";import{createFilter as gt,normalizePath as q}from"vite";import{parse as at}from"url";import pt from"lodash.sortby";function xe(t){let o=[];for(let[,r]of t.entries())r&&(w(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}=at(r.url,!0),i=e[n]??(e[n]=[]),c={...r,url:n};if(c.ws!==!0){let u=c.validator;le(s)||(P(u)?c.validator=function(d){return _(d.query,s)&&u(d)}:u?(c.validator={...u},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]=pt(e[r],n=>{if(n.ws===!0)return 0;let{validator:s}=n;return s?P(s)?0:1/Object.keys(s).reduce((c,u)=>c+lt(s[u]),0):2})}),e}function lt(t){return t?Object.keys(t).length:0}var yt=de(import.meta.url),$=mt(yt),K=class extends ut{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=gt(e,r,{resolve:!1});kt(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=q(i),this.emit("mock:update",i),j("watcher:add",i)}),s.on("change",async i=>{i=q(i),this.emit("mock:update",i),j("watcher:change",i)}),s.on("unlink",async i=>{i=q(i),this.emit("mock:unlink",i),j("watcher:unlink",i)}),this.mockWatcher=s}watchDeps(){let e=[];this.depsWatcher=Se.watch([],{ignoreInitial:!0,cwd:this.cwd}),this.depsWatcher.on("change",r=>{r=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=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.default?c=i.default:(c=[],Object.keys(i).forEach(u=>{w(i[u])?c.push(...i[u]):c.push(i[u])})),w(c)?c.forEach(u=>u.__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=`${dt(s)}.mjs`;await oe.promises.writeFile(i,r,"utf8");try{return await import(c)}finally{try{oe.unlinkSync(i)}catch{}}}else{e=we.resolve(this.cwd,e);let s=we.extname(e),i=oe.realpathSync(e),c=s in $.extensions?s:".js",u=$.extensions[c];$.extensions[c]=(v,h)=>{h===i?v._compile(r,h):u(v,h)},delete $.cache[$.resolve(e)];let d=$(e);return $.extensions[c]=u,d.__esModule?d:{default:d}}}async transformWithEsbuild(e,r){var n;try{let s=await ft({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:[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:{}}}};import{parse as Oe}from"url";import ht from"cookies";import{pathToRegexp as Ce}from"path-to-regexp";import vt from"picocolors";import{WebSocketServer as Mt}from"ws";function je(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},u=(a,l)=>{let p=a.get(l);return!p&&a.set(l,p=new Mt({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,m,f,k)=>{var g;try{(g=p.setup)==null||g.call(p,l,m),l.on("close",()=>{a.delete(f)})}catch(S){R.error(`${vt.red("[websocket server error]")} ${k}
|
|
51
51
|
`,S)}},h=(a,l,p,m)=>{a.emit("connection",l,p),l.on("close",()=>{let f=m.findIndex(k=>k.ws===l);f!==-1&&m.splice(f,1)})},F=(a,l,p,m,f)=>{let{cleanupList:k,connectionList:g,context:S}=i.get(l);Pe(k),g.forEach(({ws:C})=>C.removeAllListeners()),l.removeAllListeners(),v(a,l,p,S,m,f),g.forEach(({ws:C,req:E})=>h(l,C,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 m of t.mockData[p]){if(!m.ws||m.__filepath__!==a)return;let f=c(p);for(let[k,g]of f.entries())F(f,g,m,k,a)}}),o==null||o.on("upgrade",(a,l,p)=>{let{pathname:m,query:f}=Oe(a.url,!0);if(!m||e.length===0||!e.some(M=>X(M,a.url)))return;let k=t.mockData,g=Object.keys(k).find(M=>Ce(M).test(m));if(!g)return;let S=k[g].find(M=>M.url&&M.ws&&Ce(M.url).test(m));if(!S)return;let C=S.__filepath__;d(C,g);let E=c(g),I=u(E,m),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,S,ne,m,C)}let y=a,H=new ht(a,a,r),{query:We}=Oe(a.headers.referer||"",!0);y.query=f,y.refererQuery=We,y.params=N(g,m),y.getCookie=H.get.bind(H),I.handleUpgrade(y,l,p,M=>{j(`websocket-mock: ${a.url} connected`),L.connectionList.push({req:y,ws:M}),h(I,M,y,L.connectionList)})}),o==null||o.on("close",()=>{for(let a of s.values()){for(let l of a.values()){let p=i.get(l);Pe(p.cleanupList),l.close()}a.clear()}s.clear(),n.clear()})}function Pe(t){let o;for(;o=t.shift();)o==null||o()}async function re(t,o,e,r){let n=O(o.include),s=O(o.exclude),i={};if(t.define)for(let v in t.define){let h=t.define[v];i[v]=typeof h=="string"?h:JSON.stringify(h)}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:u}=Q(t.server.proxy||{}),d=O(o.prefix);return je(c,e,O(o.wsPrefix),o.cookiesOptions),be(c,{formidableOptions:o.formidableOptions,proxies:[...d,...u],cookiesOptions:o.cookiesOptions})}function Re({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 u={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=[xt(u)];return u.build&&d.push(bt(u)),d}function bt(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 xt(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 re(r,t,n,s);e.use(i)},async configurePreviewServer({middlewares:e,httpServer:r}){let n=await re(o,t,r);e.use(n)}}}function Zo(t){return t}function er(t){return e=>(w(e)?e=e.map(r=>t(r)||r):e=t(e)||e,e)}var nr=Re;export{be as baseMiddleware,er as createDefineMock,nr as default,Zo as defineMock,Re as mockDevServerPlugin,je as mockWebSocket,xe as transformMockData};
|