vite-plugin-mock-dev-server 1.3.0 → 1.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -142,7 +142,7 @@ export default defineConfig({
142
142
 
143
143
  - `options.wsPrefix`
144
144
 
145
- **类型:** `string | string[]`
145
+ **Type:** `string | string[]`
146
146
 
147
147
  Configure the matching rules for the WebSocket service. Any request path starting with the value of `wsPrefix` and using the `ws/wss` protocol will be proxied to the corresponding target.
148
148
 
@@ -187,7 +187,7 @@ export default defineConfig({
187
187
 
188
188
  - `options.log`
189
189
 
190
- **Type:** `true | 'info' | 'warn' | 'error' | 'silent'`
190
+ **Type:** `boolean | 'info' | 'warn' | 'error' | 'silent'`
191
191
 
192
192
  Enable log and configure log level.
193
193
 
@@ -469,6 +469,55 @@ type Response = http.ServerResponse<http.IncomingMessage> & {
469
469
  > the 'response' method is not supported,
470
470
  > as is the function form that uses other fields.
471
471
 
472
+ ## Share Mock Data
473
+
474
+ Due to each `mock` file being compiled as a separate entry point, the local files they depend on are also compiled within. Additionally, each mock file has an independent scope. This means that even if multiple mock files collectively depend on a `data.ts` file, they cannot share data. If one mock file modifies the data in `data.ts`, other mock files will not receive the updated data.
475
+
476
+ To address this, the plugin offers a `defineMockData` function, which allows using `data.ts` as a shared data source within mock files.
477
+
478
+ ```ts
479
+ type defineMockData<T> = (
480
+ key: string, // key
481
+ initialData: T, // initial data
482
+ ) => [getter, setter] & { value: T }
483
+ ```
484
+
485
+ #### Exp:
486
+ `data.ts`
487
+ ```ts
488
+ import { defineMockData } from 'vite-plugin-mock-dev-server'
489
+
490
+ export default defineMockData('posts', [
491
+ { id: '1', title: 'title1', content: 'content1' },
492
+ { id: '2', title: 'title2', content: 'content2' },
493
+ ])
494
+ ```
495
+ `*.mock.ts`
496
+ ```ts
497
+ import { defineMock } from 'vite-plugin-mock-dev-server'
498
+ import posts from './data'
499
+
500
+ export default defineMock([
501
+ {
502
+ url: '/api/posts',
503
+ body: () => posts.value
504
+ },
505
+ {
506
+ url: '/api/posts/delete/:id',
507
+ body: (params) => {
508
+ const id = params.id
509
+ posts.value = posts.value.filter((post) => post.id !== id)
510
+ return { success: true }
511
+ }
512
+ }
513
+ ])
514
+ ```
515
+
516
+ > **Tips:**
517
+ >
518
+ > The `defineMockData` function relies solely on the shared data support provided by `memory`.
519
+ > If persistent mock data is required, it is recommended to use a `nosql` database like `lowdb` or `level`.
520
+
472
521
  ## Example
473
522
 
474
523
  `mock/**/*.mock.{ts,js,mjs,cjs,json,json5}`
@@ -803,6 +852,37 @@ You can access related `mock` interfaces through `localhost:8080/`.
803
852
 
804
853
  [awesome-vite](https://github.com/vitejs/awesome-vite#helpers)
805
854
 
855
+ ## Contributors
856
+
857
+ <!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
858
+ [![All Contributors](https://img.shields.io/badge/all_contributors-3-orange.svg?style=flat-square)](#contributors-)
859
+ <!-- ALL-CONTRIBUTORS-BADGE:END -->
860
+
861
+ <!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
862
+ <!-- prettier-ignore-start -->
863
+ <!-- markdownlint-disable -->
864
+ <table>
865
+ <tbody>
866
+ <tr>
867
+ <td align="center" valign="top" width="14.28%"><a href="https://pengzhanbo.cn"><img src="https://avatars.githubusercontent.com/u/16745751?v=4?s=100" width="100px;" alt="pengzhanbo"/><br /><sub><b>pengzhanbo</b></sub></a><br /><a href="https://github.com/pengzhanbo/vite-plugin-mock-dev-server/commits?author=pengzhanbo" title="Documentation">📖</a> <a href="#ideas-pengzhanbo" title="Ideas, Planning, & Feedback">🤔</a> <a href="#example-pengzhanbo" title="Examples">💡</a> <a href="https://github.com/pengzhanbo/vite-plugin-mock-dev-server/commits?author=pengzhanbo" title="Code">💻</a></td>
868
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/jiadesen"><img src="https://avatars.githubusercontent.com/u/22772994?v=4?s=100" width="100px;" alt="jiadesen"/><br /><sub><b>jiadesen</b></sub></a><br /><a href="#ideas-jiadesen" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://github.com/pengzhanbo/vite-plugin-mock-dev-server/issues?q=author%3Ajiadesen" title="Bug reports">🐛</a></td>
869
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/yogibaba"><img src="https://avatars.githubusercontent.com/u/152670?v=4?s=100" width="100px;" alt="yogibaba"/><br /><sub><b>yogibaba</b></sub></a><br /><a href="https://github.com/pengzhanbo/vite-plugin-mock-dev-server/commits?author=yogibaba" title="Code">💻</a></td>
870
+ </tr>
871
+ </tbody>
872
+ </table>
873
+
874
+ <!-- markdownlint-restore -->
875
+ <!-- prettier-ignore-end -->
876
+
877
+ <!-- ALL-CONTRIBUTORS-LIST:END -->
878
+ <!-- prettier-ignore-start -->
879
+ <!-- markdownlint-disable -->
880
+
881
+ <!-- markdownlint-restore -->
882
+ <!-- prettier-ignore-end -->
883
+
884
+ <!-- ALL-CONTRIBUTORS-LIST:END -->
885
+
806
886
  ## LICENSE
807
887
 
808
888
  [MIT](/LICENSE)
package/README.zh-CN.md CHANGED
@@ -183,7 +183,7 @@ export default defineConfig({
183
183
 
184
184
  - `options.log`
185
185
 
186
- **Type:** `true | 'info' | 'warn' | 'error' | 'silent'`
186
+ **Type:** `boolean | 'info' | 'warn' | 'error' | 'silent'`
187
187
 
188
188
  启动日志,以及配置日志打印级别
189
189
 
@@ -457,6 +457,57 @@ type Response = http.ServerResponse<http.IncomingMessage> & {
457
457
  >
458
458
  > 如果使用 json/json5 编写 mock文件,则不支持使用 `response` 方法,以及不支持使用其他字段的函数形式。
459
459
 
460
+ ## 共享 Mock 数据
461
+
462
+ 由于每个mock文件都是作为独立的入口进行编译,其依赖的本地文件也编译在内,
463
+ 且每个mock文件拥有独立的作用域,这使得即使多个 mock文件共同依赖某一个`data.ts`文件,也无法共享数据。
464
+ 某个 `mock` 文件对 `data.ts` 中的数据进行修改,其它`mock`文件不会获取到修改后的数据。
465
+
466
+ 为此,插件提供了一个 `defineMockData` 函数,用于在 `mock` 文件中使用 `data.ts` 作为共享数据源。
467
+
468
+ ```ts
469
+ type defineMockData<T> = (
470
+ key: string, // 数据唯一标识符
471
+ initialData: T, // 初始化数据
472
+ ) => [getter, setter] & { value: T }
473
+ ```
474
+
475
+ #### 用法:
476
+ `data.ts`
477
+ ```ts
478
+ import { defineMockData } from 'vite-plugin-mock-dev-server'
479
+
480
+ export default defineMockData('posts', [
481
+ { id: '1', title: 'title1', content: 'content1' },
482
+ { id: '2', title: 'title2', content: 'content2' },
483
+ ])
484
+ ```
485
+ `*.mock.ts`
486
+ ```ts
487
+ import { defineMock } from 'vite-plugin-mock-dev-server'
488
+ import posts from './data'
489
+
490
+ export default defineMock([
491
+ {
492
+ url: '/api/posts',
493
+ body: () => posts.value
494
+ },
495
+ {
496
+ url: '/api/posts/delete/:id',
497
+ body: (params) => {
498
+ const id = params.id
499
+ posts.value = posts.value.filter((post) => post.id !== id)
500
+ return { success: true }
501
+ }
502
+ }
503
+ ])
504
+ ```
505
+
506
+ > **注意:**
507
+ >
508
+ > `defineMockData` 仅是基于 `memory` 提供的共享数据支持,
509
+ > 如果需要做 mock 数据持久化,建议使用 `nosql`, 如 `lowdb` 或 `level` 等。
510
+
460
511
  ## Example
461
512
 
462
513
  `mock/**/*.mock.{ts,js,mjs,cjs,json,json5}`
package/dist/index.cjs CHANGED
@@ -1,4 +1,4 @@
1
- "use strict";var ct=Object.create;var Z=Object.defineProperty;var at=Object.getOwnPropertyDescriptor;var pt=Object.getOwnPropertyNames;var lt=Object.getPrototypeOf,mt=Object.prototype.hasOwnProperty;var ut=(t,o)=>{for(var e in o)Z(t,e,{get:o[e],enumerable:!0})},Se=(t,o,e,n)=>{if(o&&typeof o=="object"||typeof o=="function")for(let s of pt(o))!mt.call(t,s)&&s!==e&&Z(t,s,{get:()=>o[s],enumerable:!(n=at(o,s))||n.enumerable});return t};var f=(t,o,e)=>(e=t!=null?ct(lt(t)):{},Se(o||!t||!t.__esModule?Z(e,"default",{value:t,enumerable:!0}):e,t)),dt=t=>Se(Z({},"__esModule",{value:!0}),t);var qt={};ut(qt,{baseMiddleware:()=>ke,createDefineMock:()=>Ft,default:()=>Ut,defineMock:()=>Ht,mockDevServerPlugin:()=>xe,mockWebSocket:()=>Me,transformMockData:()=>ye});module.exports=dt(qt);var ft=()=>typeof document>"u"?new URL("file:"+__filename).href:document.currentScript&&document.currentScript.src||new URL("main.js",document.baseURI).href,w=ft();var nt=require("@pengzhanbo/utils");var Fe=f(require("fs"),1),K=f(require("fs/promises"),1),q=f(require("path"),1),X=require("@pengzhanbo/utils"),Ue=f(require("fast-glob"),1),qe=f(require("is-core-module"),1),pe=require("vite");var Re="vite-plugin-mock-dev-server",Ce="1.3.0";var U=f(require("fs"),1),$e=require("module"),se=f(require("path"),1),_e=require("url"),De=require("esbuild"),Ie=f(require("json5"),1);var ee=f(require("fs"),1),te=f(require("path"),1),Pe=require("querystring"),oe=require("url"),We=f(require("debug"),1),je=require("path-to-regexp"),gt=t=>t!==null&&typeof t=="object"&&typeof t.pipe=="function",Le=t=>gt(t)&&t.readable!==!1&&typeof t._read=="function"&&typeof t._readableState=="object";function Ee(t){return te.default.dirname((0,oe.fileURLToPath)(t))}var re=(0,We.default)("vite:mock-dev-server");function Q(t,o,e){for(let s of o){let r=te.default.join(t,s);if(ee.default.existsSync(r)&&ee.default.statSync(r).isFile()){let i=e!=null&&e.pathOnly?r:ee.default.readFileSync(r,"utf-8");if(!(e!=null&&e.predicate)||e.predicate(i))return i}}let n=te.default.dirname(t);if(n!==t&&(!(e!=null&&e.rootDir)||n.startsWith(e==null?void 0:e.rootDir)))return Q(n,o,e)}var ne=(t={})=>{let o=[],e=[];return Object.keys(t).forEach(n=>{var r,i;let s=t[n];typeof s=="string"||!s.ws&&!((r=s.target)!=null&&r.toString().startsWith("ws:"))&&!((i=s.target)!=null&&i.toString().startsWith("wss:"))?o.push(n):e.push(n)}),{httpProxies:o,wsProxies:e}};function z(t,o){return t[0]==="^"&&new RegExp(t).test(o)||o.startsWith(t)}function V(t,o){return((0,je.match)(t,{decode:decodeURIComponent})(o)||{params:{}}).params||{}}function W(t){let o=new oe.URL(t,"http://example.com"),e=decodeURIComponent(o.pathname),n=(0,Pe.parse)(o.search.replace(/^\?/,""));return{pathname:e,query:n}}var kt={name:"externalize-deps",setup(t){t.onResolve({filter:/.*/},({path:o})=>{if(o[0]!=="."&&!se.default.isAbsolute(o))return{external:!0}})}},yt={name:"json5-loader",setup(t){t.onLoad({filter:/\.json5$/},async({path:o})=>{let e=await U.promises.readFile(o,"utf-8");return{contents:`export default ${JSON.stringify(Ie.default.parse(e))}`,loader:"js"}})}},ht={name:"json-loader",setup(t){t.onLoad({filter:/\.json$/},async({path:o})=>({contents:`export default ${await U.promises.readFile(o,"utf-8")}`,loader:"js"}))}},vt=t=>({name:"alias-plugin",setup(o){o.onResolve({filter:/.*/},async({path:e})=>{let n=t.find(({find:c})=>Mt(c,e));if(!n)return null;let{find:s,replacement:r}=n;return{path:(await o.resolve(e.replace(s,r),{kind:"import-statement",resolveDir:r,namespace:"file"})).path,external:!1}})}});function Mt(t,o){return t instanceof RegExp?t.test(o):o.length<t.length?!1:o===t?!0:o.startsWith(`${t}/`)}async function ie(t,o){var r;let{isESM:e=!0,define:n,alias:s}=o;try{let i=await(0,De.build)({entryPoints:[t],outfile:"out.js",write:!1,target:["node14.18","node16"],platform:"node",bundle:!0,metafile:!0,format:e?"esm":"cjs",define:n,plugins:[vt(s),kt,ht,yt]});return{code:i.outputFiles[0].text,deps:((r=i.metafile)==null?void 0:r.inputs)||{}}}catch(i){console.error(i)}return{code:"",deps:{}}}var bt=Ee(w),F=(0,$e.createRequire)(bt);async function Te(t,o,e,n){if(e){let s=`${t}.timestamp-${Date.now()}`,r=`${s}.mjs`,i=`${(0,_e.pathToFileURL)(s)}.mjs`;await U.promises.writeFile(r,o,"utf8");try{return await import(i)}finally{try{U.default.unlinkSync(r)}catch{}}}else{t=se.default.resolve(n,t);let s=se.default.extname(t),r=U.default.realpathSync(t),i=s in F.extensions?s:".js",c=F.extensions[i];F.extensions[i]=(p,m)=>{m===r?p._compile(o,m):c(p,m)},delete F.cache[F.resolve(t)];let a=F(t);return F.extensions[i]=c,a.__esModule?a:{default:a}}}var ue=f(require("picocolors"),1);var He=require("@pengzhanbo/utils"),$=f(require("picocolors"),1),Ne={silent:0,error:1,warn:2,info:3};function ce(t,o="info"){t=`[${t}]`;function e(s,r,i){if(i=(0,He.isBoolean)(i)?i?o:"error":i,Ne[i]>=Ne[s]){let a=s==="info"?"log":s,p=s==="info"?$.default.cyan($.default.bold(t)):s==="warn"?$.default.yellow($.default.bold(t)):$.default.red($.default.bold(t)),m=`${$.default.dim(new Date().toLocaleTimeString())} ${p} ${r}`;console[a](m)}}return{info(s,r=o){e("info",s,r)},warn(s,r=o){e("warn",s,r)},error(s,r=o){e("error",s,r)}}}var xt=/import\.meta\.env\.(.+)/;function ae(t){let o=ce("vite:mock-dev-server","warn"),e={},n=process.env.NODE_ENV||t.mode;Object.assign(e,{"process.env.NODE_ENV":JSON.stringify(n),"global.process.env.NODE_ENV":JSON.stringify(n),"globalThis.process.env.NODE_ENV":JSON.stringify(n),__vite_process_env_NODE_ENV:JSON.stringify(n)});let s={},r={},i=[];for(let p in t.define){let m=t.define[p];if(typeof m=="string")try{JSON.parse(m),s[p]=m}catch{i.push(p)}else s[p]=JSON.stringify(m);let h=p.match(xt);h&&s[p]&&(r[h[1]]=`__vite__define__${s[p]}`)}i.length&&o.warn(`The following keys: ${ue.default.yellow(ue.default.underline(i.join(", ")))} declared in 'define' cannot be parsed as regular code snippets.`);let c={},a={};c["import.meta.hot"]="undefined";for(let p in t.env)c[`import.meta.env.${p}`]=JSON.stringify(t.env[p]);return Object.assign(a,{"import.meta.env":JSON.stringify({...t.env,...r}).replace(/"__vite__define__(.+?)"([,}])/g,(p,m,h)=>`${m.replace(/(^\\")|(\\"$)/g,'"')}${h}`)}),{...c,...s,...a,...e}}async function Be(t,o,e){let n=(0,X.toArray)(e.include),s=(0,X.toArray)(e.exclude),r=ae(o),{httpProxies:i}=ne(o.server.proxy||{});i.push(...(0,X.toArray)(e.prefix));let c=(0,X.toArray)(e.wsPrefix),a={};try{let u=Q(o.root,["package.json"]);u&&(a=JSON.parse(u))}catch{}let p=e.build.dist,m=await Rt(process.cwd(),n,s),h=q.default.join(o.root,`mock-data-${Date.now()}.js`);await K.default.writeFile(h,m,"utf-8");let{code:S,deps:E}=await ie(h,{define:r,alias:o.resolve.alias}),j=wt(E);await K.default.unlink(h);let l=[{filename:q.default.join(p,"mock-data.js"),source:S},{filename:q.default.join(p,"index.js"),source:Ot(i,c,e.cookiesOptions,e.build.serverPort)},{filename:q.default.join(p,"package.json"),source:St(a,j)}];try{if(q.default.isAbsolute(p)){await K.default.rm(p,{recursive:!0}),Fe.default.mkdirSync(p,{recursive:!0});for(let{filename:u,source:d}of l)await K.default.writeFile(u,d,"utf-8")}else for(let{filename:u,source:d}of l)t.emitFile({type:"asset",fileName:u,source:d})}catch{}}function wt(t){let o=new Set,e=[Re,"connect","cors"];return Object.keys(t).forEach(n=>{t[n].imports.filter(r=>r.external&&!r.path.startsWith("<define:")).map(r=>r.path).forEach(r=>{!e.includes(r)&&!(0,qe.default)(r)&&o.add(r)})}),Array.from(o)}function St(t,o){let{dependencies:e={},devDependencies:n={}}=t,s={...e,...n},r={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=>{r.dependencies[i]=s[i]||"latest"}),JSON.stringify(r,null,2)}function Ot(t,o,e={},n=8080){return`import { createServer } from 'node:http';
1
+ "use strict";var mt=Object.create;var ee=Object.defineProperty;var ut=Object.getOwnPropertyDescriptor;var dt=Object.getOwnPropertyNames;var ft=Object.getPrototypeOf,gt=Object.prototype.hasOwnProperty;var kt=(o,t)=>{for(var e in t)ee(o,e,{get:t[e],enumerable:!0})},Pe=(o,t,e,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of dt(t))!gt.call(o,s)&&s!==e&&ee(o,s,{get:()=>t[s],enumerable:!(n=ut(t,s))||n.enumerable});return o};var f=(o,t,e)=>(e=o!=null?mt(ft(o)):{},Pe(t||!o||!o.__esModule?ee(e,"default",{value:o,enumerable:!0}):e,o)),yt=o=>Pe(ee({},"__esModule",{value:!0}),o);var Qt={};kt(Qt,{baseMiddleware:()=>ye,createDefineMock:()=>Jt,default:()=>Gt,defineMock:()=>Bt,defineMockData:()=>zt,mockDevServerPlugin:()=>we,mockWebSocket:()=>be,transformMockData:()=>he});module.exports=yt(Qt);var ht=()=>typeof document>"u"?new URL("file:"+__filename).href:document.currentScript&&document.currentScript.src||new URL("main.js",document.baseURI).href,b=ht();var at=require("@pengzhanbo/utils");var Je=f(require("fs"),1),X=f(require("fs/promises"),1),q=f(require("path"),1),Y=require("@pengzhanbo/utils"),Ae=f(require("fast-glob"),1),ze=f(require("is-core-module"),1),le=require("vite");var je="vite-plugin-mock-dev-server",De="1.3.1";var U=f(require("fs"),1),Te=require("module"),ie=f(require("path"),1),Ne=require("url"),Fe=require("esbuild"),He=f(require("json5"),1);var te=f(require("fs"),1),oe=f(require("path"),1),Le=require("querystring"),re=require("url"),Ee=f(require("debug"),1),$e=require("path-to-regexp"),vt=o=>o!==null&&typeof o=="object"&&typeof o.pipe=="function",_e=o=>vt(o)&&o.readable!==!1&&typeof o._read=="function"&&typeof o._readableState=="object";function Ie(o){return oe.default.dirname((0,re.fileURLToPath)(o))}var ne=(0,Ee.default)("vite:mock-dev-server");function V(o,t,e){for(let s of t){let r=oe.default.join(o,s);if(te.default.existsSync(r)&&te.default.statSync(r).isFile()){let i=e!=null&&e.pathOnly?r:te.default.readFileSync(r,"utf-8");if(!(e!=null&&e.predicate)||e.predicate(i))return i}}let n=oe.default.dirname(o);if(n!==o&&(!(e!=null&&e.rootDir)||n.startsWith(e==null?void 0:e.rootDir)))return V(n,t,e)}var se=(o={})=>{let t=[],e=[];return Object.keys(o).forEach(n=>{var r,i;let s=o[n];typeof s=="string"||!s.ws&&!((r=s.target)!=null&&r.toString().startsWith("ws:"))&&!((i=s.target)!=null&&i.toString().startsWith("wss:"))?t.push(n):e.push(n)}),{httpProxies:t,wsProxies:e}};function G(o,t){return o[0]==="^"&&new RegExp(o).test(t)||t.startsWith(o)}function K(o,t){return((0,$e.match)(o,{decode:decodeURIComponent})(t)||{params:{}}).params||{}}function W(o){let t=new re.URL(o,"http://example.com"),e=decodeURIComponent(t.pathname),n=(0,Le.parse)(t.search.replace(/^\?/,""));return{pathname:e,query:n}}var Mt={name:"externalize-deps",setup(o){o.onResolve({filter:/.*/},({path:t})=>{if(t[0]!=="."&&!ie.default.isAbsolute(t))return{external:!0}})}},bt={name:"json5-loader",setup(o){o.onLoad({filter:/\.json5$/},async({path:t})=>{let e=await U.promises.readFile(t,"utf-8");return{contents:`export default ${JSON.stringify(He.default.parse(e))}`,loader:"js"}})}},xt={name:"json-loader",setup(o){o.onLoad({filter:/\.json$/},async({path:t})=>({contents:`export default ${await U.promises.readFile(t,"utf-8")}`,loader:"js"}))}},wt=o=>({name:"alias-plugin",setup(t){t.onResolve({filter:/.*/},async({path:e})=>{let n=o.find(({find:c})=>St(c,e));if(!n)return null;let{find:s,replacement:r}=n;return{path:(await t.resolve(e.replace(s,r),{kind:"import-statement",resolveDir:r,namespace:"file"})).path,external:!1}})}});function St(o,t){return o instanceof RegExp?o.test(t):t.length<o.length?!1:t===o?!0:t.startsWith(`${o}/`)}async function ce(o,t){var r;let{isESM:e=!0,define:n,alias:s}=t;try{let i=await(0,Fe.build)({entryPoints:[o],outfile:"out.js",write:!1,target:["node14.18","node16"],platform:"node",bundle:!0,metafile:!0,format:e?"esm":"cjs",define:n,plugins:[wt(s),Mt,xt,bt]});return{code:i.outputFiles[0].text,deps:((r=i.metafile)==null?void 0:r.inputs)||{}}}catch(i){console.error(i)}return{code:"",deps:{}}}var Ot=Ie(b),H=(0,Te.createRequire)(Ot);async function Ue(o,t,e,n){if(e){let s=`${o}.timestamp-${Date.now()}`,r=`${s}.mjs`,i=`${(0,Ne.pathToFileURL)(s)}.mjs`;await U.promises.writeFile(r,t,"utf8");try{return await import(i)}finally{try{U.default.unlinkSync(r)}catch{}}}else{o=ie.default.resolve(n,o);let s=ie.default.extname(o),r=U.default.realpathSync(o),i=s in H.extensions?s:".js",c=H.extensions[i];H.extensions[i]=(p,m)=>{m===r?p._compile(t,m):c(p,m)},delete H.cache[H.resolve(o)];let a=H(o);return H.extensions[i]=c,a.__esModule?a:{default:a}}}var de=f(require("picocolors"),1);var Be=require("@pengzhanbo/utils"),E=f(require("picocolors"),1),qe={silent:0,error:1,warn:2,info:3};function ae(o,t="info"){o=`[${o}]`;function e(s,r,i){if(i=(0,Be.isBoolean)(i)?i?t:"error":i,qe[i]>=qe[s]){let a=s==="info"?"log":s,p=s==="info"?E.default.cyan(E.default.bold(o)):s==="warn"?E.default.yellow(E.default.bold(o)):E.default.red(E.default.bold(o)),m=`${E.default.dim(new Date().toLocaleTimeString())} ${p} ${r}`;console[a](m)}}return{info(s,r=t){e("info",s,r)},warn(s,r=t){e("warn",s,r)},error(s,r=t){e("error",s,r)}}}var Ct=/import\.meta\.env\.(.+)/;function pe(o){let t=ae("vite:mock-dev-server","warn"),e={},n=process.env.NODE_ENV||o.mode;Object.assign(e,{"process.env.NODE_ENV":JSON.stringify(n),"global.process.env.NODE_ENV":JSON.stringify(n),"globalThis.process.env.NODE_ENV":JSON.stringify(n),__vite_process_env_NODE_ENV:JSON.stringify(n)});let s={},r={},i=[];for(let p in o.define){let m=o.define[p];if(typeof m=="string")try{JSON.parse(m),s[p]=m}catch{i.push(p)}else s[p]=JSON.stringify(m);let h=p.match(Ct);h&&s[p]&&(r[h[1]]=`__vite__define__${s[p]}`)}i.length&&t.warn(`The following keys: ${de.default.yellow(de.default.underline(i.join(", ")))} declared in 'define' cannot be parsed as regular code snippets.`);let c={},a={};c["import.meta.hot"]="undefined";for(let p in o.env)c[`import.meta.env.${p}`]=JSON.stringify(o.env[p]);return Object.assign(a,{"import.meta.env":JSON.stringify({...o.env,...r}).replace(/"__vite__define__(.+?)"([,}])/g,(p,m,h)=>`${m.replace(/(^\\")|(\\"$)/g,'"')}${h}`)}),{...c,...s,...a,...e}}async function Ge(o,t,e){let n=(0,Y.toArray)(e.include),s=(0,Y.toArray)(e.exclude),r=pe(t),{httpProxies:i}=se(t.server.proxy||{});i.push(...(0,Y.toArray)(e.prefix));let c=(0,Y.toArray)(e.wsPrefix),a={};try{let u=V(t.root,["package.json"]);u&&(a=JSON.parse(u))}catch{}let p=e.build.dist,m=await jt(process.cwd(),n,s),h=q.default.join(t.root,`mock-data-${Date.now()}.js`);await X.default.writeFile(h,m,"utf-8");let{code:S,deps:L}=await ce(h,{define:r,alias:t.resolve.alias}),j=Rt(L);await X.default.unlink(h);let l=[{filename:q.default.join(p,"mock-data.js"),source:S},{filename:q.default.join(p,"index.js"),source:Wt(i,c,e.cookiesOptions,e.build.serverPort)},{filename:q.default.join(p,"package.json"),source:Pt(a,j)}];try{if(q.default.isAbsolute(p)){await X.default.rm(p,{recursive:!0}),Je.default.mkdirSync(p,{recursive:!0});for(let{filename:u,source:d}of l)await X.default.writeFile(u,d,"utf-8")}else for(let{filename:u,source:d}of l)o.emitFile({type:"asset",fileName:u,source:d})}catch{}}function Rt(o){let t=new Set,e=[je,"connect","cors"];return Object.keys(o).forEach(n=>{o[n].imports.filter(r=>r.external&&!r.path.startsWith("<define:")).map(r=>r.path).forEach(r=>{!e.includes(r)&&!(0,ze.default)(r)&&t.add(r)})}),Array.from(t)}function Pt(o,t){let{dependencies:e={},devDependencies:n={}}=o,s={...e,...n},r={name:"mock-server",type:"module",scripts:{start:"node index.js"},dependencies:{connect:"^3.7.0","vite-plugin-mock-dev-server":`^${De}`,cors:"^2.8.5"},pnpm:{peerDependencyRules:{ignoreMissing:["vite"]}}};return t.forEach(i=>{r.dependencies[i]=s[i]||"latest"}),JSON.stringify(r,null,2)}function Wt(o,t,e={},n=8080){return`import { createServer } from 'node:http';
2
2
  import connect from 'connect';
3
3
  import corsMiddleware from 'cors';
4
4
  import { baseMiddleware, mockWebSocket } from 'vite-plugin-mock-dev-server';
@@ -6,8 +6,8 @@ import mockData from './mock-data.js';
6
6
 
7
7
  const app = connect();
8
8
  const server = createServer(app);
9
- const httpProxies = ${JSON.stringify(t)};
10
- const wsProxies = ${JSON.stringify(o)};
9
+ const httpProxies = ${JSON.stringify(o)};
10
+ const wsProxies = ${JSON.stringify(t)};
11
11
  const cookiesOptions = ${JSON.stringify(e)};
12
12
 
13
13
  mockWebSocket({ mockData }, server, wsProxies, cookiesOptions);
@@ -22,7 +22,7 @@ app.use(baseMiddleware({ mockData }, {
22
22
  server.listen(${n});
23
23
 
24
24
  console.log('listen: http://localhost:${n}');
25
- `}async function Rt(t,o,e){let n=await(0,Ue.default)(o,{cwd:t}),s=(0,pe.createFilter)(o,e,{resolve:!1}),r=n.filter(s),i="",c="";return r.forEach((a,p)=>{let m=(0,pe.normalizePath)(q.default.join(t,a));i+=`import * as m${p} from '${m}';
25
+ `}async function jt(o,t,e){let n=await(0,Ae.default)(t,{cwd:o}),s=(0,le.createFilter)(t,e,{resolve:!1}),r=n.filter(s),i="",c="";return r.forEach((a,p)=>{let m=(0,le.normalizePath)(q.default.join(o,a));i+=`import * as m${p} from '${m}';
26
26
  `,c+=`m${p}, `}),`import { transformMockData } from 'vite-plugin-mock-dev-server';
27
27
  ${i}
28
28
  const exporters = [${c}];
@@ -40,18 +40,18 @@ const mockList = exporters.map((raw) => {
40
40
  }
41
41
  return mockConfig
42
42
  });
43
- export default transformMockData(mockList);`}var J=require("@pengzhanbo/utils"),ot=f(require("cors"),1),rt=require("path-to-regexp");var fe=require("buffer"),y=require("@pengzhanbo/utils"),Ve=f(require("cookies"),1),Ke=f(require("http-status"),1),Y=f(require("mime-types"),1),ge=require("path-to-regexp"),b=f(require("picocolors"),1);var le=f(require("co-body"),1),Je=f(require("formidable"),1);async function Ae(t,o){var s;let e=t.method.toUpperCase();if(["GET","DELETE","HEAD"].includes(e))return;let n=((s=t.headers["content-type"])==null?void 0:s.toLocaleLowerCase())||"";try{if(n.startsWith("application/json"))return await le.default.json(t);if(n.startsWith("application/x-www-form-urlencoded"))return await le.default.form(t);if(n.startsWith("text/plain"))return await le.default.text(t);if(n.startsWith("multipart/form-data"))return await Ct(t,o)}catch(r){console.error(r)}}async function Ct(t,o){let e=(0,Je.default)(o);return new Promise((n,s)=>{e.parse(t,(r,i,c)=>{if(r){s(r);return}n({...i,...c})})})}var G=require("@pengzhanbo/utils");function ze(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(!Ge(t[e],o[e]))return!1;return!0}function Ge(t,o){if((0,G.isArray)(t)&&(0,G.isArray)(o)){let e=new Set;return o.every(n=>t.some((s,r)=>{if(e.has(r))return!1;let i=Ge(s,n);return i&&e.add(r),i}))}return(0,G.isObject)(t)&&(0,G.isObject)(o)?_(t,o):Object.is(t,o)}var Pt=/:/g;function ke(t,{formidableOptions:o={},proxies:e,cookiesOptions:n,logger:s}){return async function(r,i,c){let a=(0,y.timestamp)(),{query:p,pathname:m}=W(r.url);if(!m||e.length===0||!e.some(R=>z(R,r.url)))return c();let h=t.mockData,S=(0,y.sortBy)(Object.keys(h),R=>{var x;return((x=R.match(Pt))==null?void 0:x.length)||0}).find(R=>(0,ge.pathToRegexp)(R).test(m));if(!S)return c();let{query:E}=W(r.headers.referer||""),j=await Ae(r,o),l=new Ve.default(r,i,n),u=l.get.bind(l),d=r.method.toUpperCase(),g=Wt(h[S],s,{pathname:m,method:d,request:{query:p,refererQuery:E,body:j,headers:r.headers,getCookie:u}});if(!g)return c();let k=r,v=i;k.body=j,k.query=p,k.refererQuery=E,k.params=V(g.url,m),k.getCookie=u,v.setCookie=l.set.bind(l);let{body:M,delay:O,type:L="json",response:T,status:N=200,statusText:H,log:P,__filepath__:A}=g;if(de(v,N,H),await jt(k,v,g,s),await Lt(k,v,g,s),s.info(_t(k,A),P),M){try{let R=(0,y.isFunction)(M)?await M(k):M;await Qe(a,O),Et(v,R,L)}catch(R){s.error(`${b.default.red(`mock error at ${m}`)}
44
- ${R}
45
- at body (${b.default.underline(A)})`,P),de(v,500),i.end("")}return}if(T){try{await Qe(a,O),await T(k,v,c)}catch(R){s.error(`${b.default.red(`mock error at ${m}`)}
46
- ${R}
47
- at response (${b.default.underline(A)})`,P),de(v,500),i.end("")}return}i.end("")}}function Wt(t,o,{pathname:e,method:n,request:s}){return t.find(r=>{if(!e||!r||!r.url||r.ws===!0||!(r.method?(0,y.isArray)(r.method)?r.method:[r.method]:["GET","POST"]).includes(n))return!1;let c=(0,ge.pathToRegexp)(r.url).test(e);if(c&&r.validator){let a=V(r.url,e);if((0,y.isFunction)(r.validator))return r.validator({params:a,...s});try{return ze({params:a,...s},r.validator)}catch(p){let m=r.__filepath__;return o.error(`${b.default.red(`mock error at ${e}`)}
43
+ export default transformMockData(mockList);`}var J=require("@pengzhanbo/utils"),it=f(require("cors"),1),ct=require("path-to-regexp");var ge=require("buffer"),y=require("@pengzhanbo/utils"),Ze=f(require("cookies"),1),et=f(require("http-status"),1),Z=f(require("mime-types"),1),ke=require("path-to-regexp"),x=f(require("picocolors"),1);var me=f(require("co-body"),1),Qe=f(require("formidable"),1);async function Ve(o,t){var s;let e=o.method.toUpperCase();if(["GET","DELETE","HEAD"].includes(e))return;let n=((s=o.headers["content-type"])==null?void 0:s.toLocaleLowerCase())||"";try{if(n.startsWith("application/json"))return await me.default.json(o);if(n.startsWith("application/x-www-form-urlencoded"))return await me.default.form(o);if(n.startsWith("text/plain"))return await me.default.text(o);if(n.startsWith("multipart/form-data"))return await Dt(o,t)}catch(r){console.error(r)}}async function Dt(o,t){let e=(0,Qe.default)(t);return new Promise((n,s)=>{e.parse(o,(r,i,c)=>{if(r){s(r);return}n({...i,...c})})})}var Q=require("@pengzhanbo/utils");function Ke(o,t){return $(o.headers,t.headers)&&$(o.body,t.body)&&$(o.params,t.params)&&$(o.query,t.query)&&$(o.refererQuery,t.refererQuery)}function $(o,t){if(!t)return!0;for(let e in t)if(!Xe(o[e],t[e]))return!1;return!0}function Xe(o,t){if((0,Q.isArray)(o)&&(0,Q.isArray)(t)){let e=new Set;return t.every(n=>o.some((s,r)=>{if(e.has(r))return!1;let i=Xe(s,n);return i&&e.add(r),i}))}return(0,Q.isObject)(o)&&(0,Q.isObject)(t)?$(o,t):Object.is(o,t)}var Lt=/:/g;function ye(o,{formidableOptions:t={},proxies:e,cookiesOptions:n,logger:s}){return async function(r,i,c){let a=(0,y.timestamp)(),{query:p,pathname:m}=W(r.url);if(!m||e.length===0||!e.some(C=>G(C,r.url)))return c();let h=o.mockData,S=(0,y.sortBy)(Object.keys(h),C=>{var w;return((w=C.match(Lt))==null?void 0:w.length)||0}).find(C=>(0,ke.pathToRegexp)(C).test(m));if(!S)return c();let{query:L}=W(r.headers.referer||""),j=await Ve(r,t),l=new Ze.default(r,i,n),u=l.get.bind(l),d=r.method.toUpperCase(),g=Et(h[S],s,{pathname:m,method:d,request:{query:p,refererQuery:L,body:j,headers:r.headers,getCookie:u}});if(!g)return c();let k=r,v=i;k.body=j,k.query=p,k.refererQuery=L,k.params=K(g.url,m),k.getCookie=u,v.setCookie=l.set.bind(l);let{body:M,delay:O,type:D="json",response:T,status:N=200,statusText:F,log:P,__filepath__:z}=g;if(fe(v,N,F),await $t(k,v,g,s),await _t(k,v,g,s),s.info(Nt(k,z),P),M){try{let C=(0,y.isFunction)(M)?await M(k):M;await Ye(a,O),It(v,C,D)}catch(C){s.error(`${x.default.red(`mock error at ${m}`)}
44
+ ${C}
45
+ at body (${x.default.underline(z)})`,P),fe(v,500),i.end("")}return}if(T){try{await Ye(a,O),await T(k,v,c)}catch(C){s.error(`${x.default.red(`mock error at ${m}`)}
46
+ ${C}
47
+ at response (${x.default.underline(z)})`,P),fe(v,500),i.end("")}return}i.end("")}}function Et(o,t,{pathname:e,method:n,request:s}){return o.find(r=>{if(!e||!r||!r.url||r.ws===!0||!(r.method?(0,y.isArray)(r.method)?r.method:[r.method]:["GET","POST"]).includes(n))return!1;let c=(0,ke.pathToRegexp)(r.url).test(e);if(c&&r.validator){let a=K(r.url,e);if((0,y.isFunction)(r.validator))return r.validator({params:a,...s});try{return Ke({params:a,...s},r.validator)}catch(p){let m=r.__filepath__;return t.error(`${x.default.red(`mock error at ${e}`)}
48
48
  ${p}
49
- at validator (${b.default.underline(m)})`,r.log),!1}}return c})}function de(t,o=200,e){t.statusCode=o,t.statusMessage=e||$t(o)}async function jt(t,o,e,n){let{headers:s,type:r="json"}=e,i=e.__filepath__,c=Y.contentType(r)||Y.contentType(Y.lookup(r)||"");if(c&&o.setHeader("Content-Type",c),o.setHeader("Cache-Control","no-cache,max-age=0"),o.setHeader("X-Mock-Power-By","vite-plugin-mock-dev-server"),o.setHeader("X-File-Path",i),!!s)try{let a=(0,y.isFunction)(s)?await s(t):s;Object.keys(a).forEach(p=>{o.setHeader(p,a[p])})}catch(a){n.error(`${b.default.red(`mock error at ${t.url.split("?")[0]}`)}
49
+ at validator (${x.default.underline(m)})`,r.log),!1}}return c})}function fe(o,t=200,e){o.statusCode=t,o.statusMessage=e||Tt(t)}async function $t(o,t,e,n){let{headers:s,type:r="json"}=e,i=e.__filepath__,c=Z.contentType(r)||Z.contentType(Z.lookup(r)||"");if(c&&t.setHeader("Content-Type",c),t.setHeader("Cache-Control","no-cache,max-age=0"),t.setHeader("X-Mock-Power-By","vite-plugin-mock-dev-server"),t.setHeader("X-File-Path",i),!!s)try{let a=(0,y.isFunction)(s)?await s(o):s;Object.keys(a).forEach(p=>{t.setHeader(p,a[p])})}catch(a){n.error(`${x.default.red(`mock error at ${o.url.split("?")[0]}`)}
50
50
  ${a}
51
- at headers (${b.default.underline(i)})`,e.log)}}async function Lt(t,o,e,n){let{cookies:s}=e,r=e.__filepath__;if(s)try{let i=(0,y.isFunction)(s)?await s(t):s;Object.keys(i).forEach(c=>{let a=i[c];if((0,y.isArray)(a)){let[p,m]=a;o.setCookie(c,p,m)}else o.setCookie(c,a)})}catch(i){n.error(`${b.default.red(`mock error at ${t.url.split("?")[0]}`)}
51
+ at headers (${x.default.underline(i)})`,e.log)}}async function _t(o,t,e,n){let{cookies:s}=e,r=e.__filepath__;if(s)try{let i=(0,y.isFunction)(s)?await s(o):s;Object.keys(i).forEach(c=>{let a=i[c];if((0,y.isArray)(a)){let[p,m]=a;t.setCookie(c,p,m)}else t.setCookie(c,a)})}catch(i){n.error(`${x.default.red(`mock error at ${o.url.split("?")[0]}`)}
52
52
  ${i}
53
- at cookies (${b.default.underline(r)})`,e.log)}}function Et(t,o,e){if(Le(o))o.pipe(t);else if(fe.Buffer.isBuffer(o))t.end(e==="text"||e==="json"?o.toString("utf-8"):o);else{let n=typeof o=="string"?o:JSON.stringify(o);t.end(e==="buffer"?fe.Buffer.from(n):n)}}async function Qe(t,o){if(!o||typeof o=="number"&&o<=0||(0,y.isArray)(o)&&o.length!==2)return;let e=0;if((0,y.isArray)(o)){let[n,s]=o;e=(0,y.random)(n,s)}else e=o-((0,y.timestamp)()-t);e>0&&await(0,y.sleep)(e)}function $t(t){return Ke.default[t]||"Unknown"}function _t(t,o){let{url:e,method:n,query:s,params:r,body:i}=t,{pathname:c}=new URL(e,"http://example.com");c=b.default.green(decodeURIComponent(c));let a=(j,l)=>!l||(0,y.isEmptyObject)(l)?"":` ${b.default.gray(`${j}:`)}${JSON.stringify(l)}`,p=b.default.magenta(b.default.bold(n)),m=a("query",s),h=a("params",r),S=a("body",i),E=` ${b.default.dim(b.default.underline(`(${o})`))}`;return`${p} ${c}${m}${h}${S}${E}`}var Xe=f(require("events"),1),I=require("@pengzhanbo/utils"),he=f(require("chokidar"),1),Ye=f(require("fast-glob"),1),D=require("vite");var C=require("@pengzhanbo/utils");function ye(t){let o=[];for(let[,n]of t.entries())n&&((0,C.isArray)(n)?o.push(...n):o.push(n));let e={};return o.filter(n=>(0,C.isObject)(n)&&n.enabled!==!1&&n.url).forEach(n=>{let{pathname:s,query:r}=W(n.url),i=e[s]??=[],c={...n,url:s};if(c.ws!==!0){let a=c.validator;(0,C.isEmptyObject)(r)||((0,C.isFunction)(a)?c.validator=function(p){return _(p.query,r)&&a(p)}:a?(c.validator={...a},c.validator.query=c.validator.query?{...r,...c.validator.query}:r):c.validator={query:r})}i.push(c)}),Object.keys(e).forEach(n=>{e[n]=(0,C.sortBy)(e[n],s=>{if(s.ws===!0)return 0;let{validator:r}=s;return!r||(0,C.isEmptyObject)(r)?2:(0,C.isFunction)(r)?0:1/Object.keys(r).reduce((c,a)=>c+Dt(r[a]),0)})}),e}function Dt(t){return t?Object.keys(t).length:0}var me=class extends Xe.default{constructor(e){super();this.options=e;this.cwd=e.cwd||process.cwd();try{let n=Q(this.cwd,["package.json"]);this.moduleType=n&&JSON.parse(n).type==="module"?"esm":"cjs"}catch{}}moduleCache=new Map;moduleDeps=new Map;cwd;mockWatcher;depsWatcher;moduleType="cjs";_mockData={};get mockData(){return this._mockData}load(){let{include:e,exclude:n}=this.options,s=(0,D.createFilter)(e,n,{resolve:!1});(0,Ye.default)(e,{cwd:this.cwd}).then(i=>i.filter(s).map(c=>()=>this.loadMock(c))).then(i=>(0,I.promiseParallel)(i,10)).then(()=>this.updateMockList()),this.watchMockEntry(),this.watchDeps();let r=null;this.on("mock:update",async i=>{s(i)&&(await this.loadMock(i),r&&clearImmediate(r),r=setImmediate(()=>{this.updateMockList(),this.emit("mock:update-end",i),r=null}))}),this.on("mock:unlink",async i=>{s(i)&&(this.moduleCache.delete(i),this.updateMockList(),this.emit("mock:update-end",i))})}watchMockEntry(){let{include:e}=this.options,[n,...s]=e,r=he.default.watch(n,{ignoreInitial:!0,cwd:this.cwd});s.length>0&&s.forEach(i=>r.add(i)),r.on("add",async i=>{i=(0,D.normalizePath)(i),this.emit("mock:update",i),re("watcher:add",i)}),r.on("change",async i=>{i=(0,D.normalizePath)(i),this.emit("mock:update",i),re("watcher:change",i)}),r.on("unlink",async i=>{i=(0,D.normalizePath)(i),this.emit("mock:unlink",i),re("watcher:unlink",i)}),this.mockWatcher=r}watchDeps(){let e=[];this.depsWatcher=he.default.watch([],{ignoreInitial:!0,cwd:this.cwd}),this.depsWatcher.on("change",n=>{n=(0,D.normalizePath)(n);let s=this.moduleDeps.get(n);s&&s.forEach(r=>{this.emit("mock:update",r)})}),this.depsWatcher.on("unlink",n=>{n=(0,D.normalizePath)(n),this.moduleDeps.delete(n)}),this.on("update:deps",()=>{let n=[];for(let[r]of this.moduleDeps.entries())n.push(r);let s=n.filter(r=>!e.includes(r));s.length>0&&this.depsWatcher.add(s)})}close(){var e,n;(e=this.mockWatcher)==null||e.close(),(n=this.depsWatcher)==null||n.close()}updateMockList(){this._mockData=ye(this.moduleCache)}updateModuleDeps(e,n){Object.keys(n).forEach(s=>{n[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 n=!1;/\.m[jt]s$/.test(e)?n=!0:/\.c[jt]s$/.test(e)?n=!1:n=this.moduleType==="esm";let{define:s,alias:r}=this.options,{code:i,deps:c}=await ie(e,{isESM:n,define:s,alias:r});try{let a=await Te(e,i,n,this.cwd)||{},p;(0,I.hasOwn)(a,"default")?p=a.default:(p=[],Object.keys(a).forEach(m=>p.push(...(0,I.toArray)(a[m])))),(0,I.isArray)(p)?p.forEach(m=>m.__filepath__=e):p.__filepath__=e,this.moduleCache.set(e,p),this.updateModuleDeps(e,c)}catch(a){console.error(a)}}};var et=f(require("cookies"),1),ve=require("path-to-regexp"),B=f(require("picocolors"),1),tt=require("ws");function Me({loader:t,httpServer:o,proxies:e,cookiesOptions:n,logger:s}){var j;let r=new Map,i=new Map,c=new WeakMap,a=l=>{let u=i.get(l);return!u&&i.set(l,u=new Map),u},p=(l,u)=>{let d=l.get(u);return!d&&l.set(u,d=new tt.WebSocketServer({noServer:!0})),d},m=(l,u)=>{let d=r.get(l);!d&&r.set(l,d=new Set),d.add(u)},h=(l,u,d,g,k,v)=>{var M;try{(M=d.setup)==null||M.call(d,u,g),u.on("close",()=>l.delete(k)),u.on("error",O=>{s.error(`${B.default.red(`WebSocket mock error at ${u.path}`)}
53
+ at cookies (${x.default.underline(r)})`,e.log)}}function It(o,t,e){if(_e(t))t.pipe(o);else if(ge.Buffer.isBuffer(t))o.end(e==="text"||e==="json"?t.toString("utf-8"):t);else{let n=typeof t=="string"?t:JSON.stringify(t);o.end(e==="buffer"?ge.Buffer.from(n):n)}}async function Ye(o,t){if(!t||typeof t=="number"&&t<=0||(0,y.isArray)(t)&&t.length!==2)return;let e=0;if((0,y.isArray)(t)){let[n,s]=t;e=(0,y.random)(n,s)}else e=t-((0,y.timestamp)()-o);e>0&&await(0,y.sleep)(e)}function Tt(o){return et.default[o]||"Unknown"}function Nt(o,t){let{url:e,method:n,query:s,params:r,body:i}=o,{pathname:c}=new URL(e,"http://example.com");c=x.default.green(decodeURIComponent(c));let a=(j,l)=>!l||(0,y.isEmptyObject)(l)?"":` ${x.default.gray(`${j}:`)}${JSON.stringify(l)}`,p=x.default.magenta(x.default.bold(n)),m=a("query",s),h=a("params",r),S=a("body",i),L=` ${x.default.dim(x.default.underline(`(${t})`))}`;return`${p} ${c}${m}${h}${S}${L}`}var tt=f(require("events"),1),I=require("@pengzhanbo/utils"),ve=f(require("chokidar"),1),ot=f(require("fast-glob"),1),_=require("vite");var R=require("@pengzhanbo/utils");function he(o){let t=[];for(let[,n]of o.entries())n&&((0,R.isArray)(n)?t.push(...n):t.push(n));let e={};return t.filter(n=>(0,R.isObject)(n)&&n.enabled!==!1&&n.url).forEach(n=>{let{pathname:s,query:r}=W(n.url),i=e[s]??=[],c={...n,url:s};if(c.ws!==!0){let a=c.validator;(0,R.isEmptyObject)(r)||((0,R.isFunction)(a)?c.validator=function(p){return $(p.query,r)&&a(p)}:a?(c.validator={...a},c.validator.query=c.validator.query?{...r,...c.validator.query}:r):c.validator={query:r})}i.push(c)}),Object.keys(e).forEach(n=>{e[n]=(0,R.sortBy)(e[n],s=>{if(s.ws===!0)return 0;let{validator:r}=s;return!r||(0,R.isEmptyObject)(r)?2:(0,R.isFunction)(r)?0:1/Object.keys(r).reduce((c,a)=>c+Ft(r[a]),0)})}),e}function Ft(o){return o?Object.keys(o).length:0}var ue=class extends tt.default{constructor(e){super();this.options=e;this.cwd=e.cwd||process.cwd();try{let n=V(this.cwd,["package.json"]);this.moduleType=n&&JSON.parse(n).type==="module"?"esm":"cjs"}catch{}}moduleCache=new Map;moduleDeps=new Map;cwd;mockWatcher;depsWatcher;moduleType="cjs";_mockData={};get mockData(){return this._mockData}load(){let{include:e,exclude:n}=this.options,s=(0,_.createFilter)(e,n,{resolve:!1});(0,ot.default)(e,{cwd:this.cwd}).then(i=>i.filter(s).map(c=>()=>this.loadMock(c))).then(i=>(0,I.promiseParallel)(i,10)).then(()=>this.updateMockList()),this.watchMockEntry(),this.watchDeps();let r=null;this.on("mock:update",async i=>{s(i)&&(await this.loadMock(i),r&&clearImmediate(r),r=setImmediate(()=>{this.updateMockList(),this.emit("mock:update-end",i),r=null}))}),this.on("mock:unlink",async i=>{s(i)&&(this.moduleCache.delete(i),this.updateMockList(),this.emit("mock:update-end",i))})}watchMockEntry(){let{include:e}=this.options,[n,...s]=e,r=this.mockWatcher=ve.default.watch(n,{ignoreInitial:!0,cwd:this.cwd});s.length>0&&s.forEach(i=>r.add(i)),r.on("add",async i=>{i=(0,_.normalizePath)(i),this.emit("mock:update",i),ne("watcher:add",i)}),r.on("change",async i=>{i=(0,_.normalizePath)(i),this.emit("mock:update",i),ne("watcher:change",i)}),r.on("unlink",async i=>{i=(0,_.normalizePath)(i),this.emit("mock:unlink",i),ne("watcher:unlink",i)})}watchDeps(){let e=[];this.depsWatcher=ve.default.watch([],{ignoreInitial:!0,cwd:this.cwd}),this.depsWatcher.on("change",n=>{n=(0,_.normalizePath)(n);let s=this.moduleDeps.get(n);s&&s.forEach(r=>{this.emit("mock:update",r)})}),this.depsWatcher.on("unlink",n=>{n=(0,_.normalizePath)(n),this.moduleDeps.delete(n)}),this.on("update:deps",()=>{let n=[];for(let[r]of this.moduleDeps.entries())n.push(r);let s=n.filter(r=>!e.includes(r));s.length>0&&this.depsWatcher.add(s)})}close(){var e,n;(e=this.mockWatcher)==null||e.close(),(n=this.depsWatcher)==null||n.close()}updateMockList(){this._mockData=he(this.moduleCache)}updateModuleDeps(e,n){Object.keys(n).forEach(s=>{n[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 n=!1;/\.m[jt]s$/.test(e)?n=!0:/\.c[jt]s$/.test(e)?n=!1:n=this.moduleType==="esm";let{define:s,alias:r}=this.options,{code:i,deps:c}=await ce(e,{isESM:n,define:s,alias:r});try{let a=await Ue(e,i,n,this.cwd)||{},p;(0,I.hasOwn)(a,"default")?p=a.default:(p=[],Object.keys(a).forEach(m=>p.push(...(0,I.toArray)(a[m])))),(0,I.isArray)(p)?p.forEach(m=>m.__filepath__=e):p.__filepath__=e,this.moduleCache.set(e,p),this.updateModuleDeps(e,c)}catch(a){console.error(a)}}};var nt=f(require("cookies"),1),Me=require("path-to-regexp"),B=f(require("picocolors"),1),st=require("ws");function be({loader:o,httpServer:t,proxies:e,cookiesOptions:n,logger:s}){var j;let r=new Map,i=new Map,c=new WeakMap,a=l=>{let u=i.get(l);return!u&&i.set(l,u=new Map),u},p=(l,u)=>{let d=l.get(u);return!d&&l.set(u,d=new st.WebSocketServer({noServer:!0})),d},m=(l,u)=>{let d=r.get(l);!d&&r.set(l,d=new Set),d.add(u)},h=(l,u,d,g,k,v)=>{var M;try{(M=d.setup)==null||M.call(d,u,g),u.on("close",()=>l.delete(k)),u.on("error",O=>{s.error(`${B.default.red(`WebSocket mock error at ${u.path}`)}
54
54
  ${O}
55
55
  at setup (${v})`,d.log)})}catch(O){s.error(`${B.default.red(`WebSocket mock error at ${u.path}`)}
56
56
  ${O}
57
- at setup (${v})`,d.log)}},S=(l,u,d,g)=>{l.emit("connection",u,d),u.on("close",()=>{let k=g.findIndex(v=>v.ws===u);k!==-1&&g.splice(k,1)})},E=(l,u,d,g,k)=>{let{cleanupList:v,connectionList:M,context:O}=c.get(u);Ze(v),M.forEach(({ws:L})=>L.removeAllListeners()),u.removeAllListeners(),h(l,u,d,O,g,k),M.forEach(({ws:L,req:T})=>S(u,L,T,M))};(j=t.on)==null||j.call(t,"mock:update-end",l=>{if(!r.has(l))return;let u=r.get(l);if(u)for(let d of u.values())for(let g of t.mockData[d]){if(!g.ws||g.__filepath__!==l)return;let k=a(d);for(let[v,M]of k.entries())E(k,M,g,v,l)}}),o==null||o.on("upgrade",(l,u,d)=>{let{pathname:g,query:k}=W(l.url);if(!g||e.length===0||!e.some(x=>z(x,l.url)))return;let v=t.mockData,M=Object.keys(v).find(x=>(0,ve.pathToRegexp)(x).test(g));if(!M)return;let O=v[M].find(x=>x.url&&x.ws&&(0,ve.pathToRegexp)(x.url).test(g));if(!O)return;let L=O.__filepath__;m(L,M);let T=a(M),N=p(T,g),H=c.get(N);if(!H){let x=[],we={onCleanup:it=>x.push(it)};H={cleanupList:x,context:we,connectionList:[]},c.set(N,H),h(T,N,O,we,g,L)}let P=l,A=new et.default(l,l,n),{query:R}=W(l.headers.referer||"");P.query=k,P.refererQuery=R,P.params=V(M,g),P.getCookie=A.get.bind(A),N.handleUpgrade(P,u,d,x=>{s.info(`${B.default.magenta(B.default.bold("WebSocket"))} ${B.default.green(l.url)} connected ${B.default.dim(`(${L})`)}`,O.log),H.connectionList.push({req:P,ws:x}),S(N,x,P,H.connectionList)})}),o==null||o.on("close",()=>{for(let l of i.values()){for(let u of l.values()){let d=c.get(u);Ze(d.cleanupList),u.close()}l.clear()}i.clear(),r.clear()})}function Ze(t){let o;for(;o=t.shift();)o==null||o()}function be(t,o,e,n){let s=ce("vite:mock",(0,J.isBoolean)(o.log)?o.log?"info":"error":o.log),r=new me({include:(0,J.toArray)(o.include),exclude:(0,J.toArray)(o.exclude),define:ae(t),alias:t.resolve.alias});r.load(),r.on("mock:update-end",()=>{o.reload&&(n==null||n.send({type:"full-reload"}))}),e==null||e.on("close",()=>r.close());let{httpProxies:i}=ne(t.server.proxy||{}),a=[...(0,J.toArray)(o.prefix),...i];Me({loader:r,httpServer:e,proxies:(0,J.toArray)(o.wsPrefix),cookiesOptions:o.cookiesOptions,logger:s});let p=[];return p.push(It(r,a,t,o),ke(r,{formidableOptions:o.formidableOptions,proxies:a,cookiesOptions:o.cookiesOptions,logger:s})),p.filter(Boolean)}function It(t,o,e,n){let s={},r=n.cors===!1?!1:e.server.cors!==!1;return r&&e.server.cors!==!1&&(s={...s,...typeof e.server.cors=="boolean"?{}:e.server.cors}),r&&n.cors!==!1&&(s={...s,...typeof n.cors=="boolean"?{}:n.cors}),r?function(i,c,a){let{pathname:p}=W(i.url);if(!p||o.length===0||!o.some(S=>z(S,i.url)))return a();let m=t.mockData;if(!Object.keys(m).find(S=>(0,rt.pathToRegexp)(S).test(p)))return a();(0,ot.default)(s)(i,c,a)}:void 0}function xe({prefix:t=[],wsPrefix:o=[],include:e=["mock/**/*.mock.{js,ts,cjs,mjs,json,json5}"],exclude:n=["**/node_modules/**","**/.vscode/**","**/.git/**"],reload:s=!1,log:r="info",cors:i=!0,formidableOptions:c={},build:a=!1,cookiesOptions:p={}}={}){let m={prefix:t,wsPrefix:o,include:e,exclude:n,reload:s,cors:i,cookiesOptions:p,log:r,formidableOptions:{multiples:!0,...c},build:a?Object.assign({serverPort:8080,dist:"mockServer"},typeof a=="object"?a:{}):!1},h=[Nt(m)];return m.build&&h.push(Tt(m)),h}function Tt(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 Be(this,o,t)}}}function Nt(t){let o={};return{name:"vite-plugin-mock-dev-server",enforce:"pre",apply:"serve",config(e){var r;let n=(0,nt.toArray)(t.wsPrefix);if(n.length===0||!((r=e.server)!=null&&r.proxy)||Object.keys(e.server.proxy).length===0)return;let s={};Object.keys(e.server.proxy).forEach(i=>{n.includes(i)||(s[i]=e.server.proxy[i])}),e.server.proxy=s},configResolved(e){o=e,e.logger.warn("")},configureServer({middlewares:e,config:n,httpServer:s,ws:r}){be(n,t,s,r).forEach(c=>e.use(c))},configurePreviewServer({middlewares:e,httpServer:n}){be(o,t,n).forEach(r=>e.use(r))}}}var st=require("@pengzhanbo/utils");function Ht(t){return t}function Ft(t){return e=>((0,st.isArray)(e)?e=e.map(n=>t(n)||n):e=t(e)||e,e)}var Ut=xe;0&&(module.exports={baseMiddleware,createDefineMock,defineMock,mockDevServerPlugin,mockWebSocket,transformMockData});
57
+ at setup (${v})`,d.log)}},S=(l,u,d,g)=>{l.emit("connection",u,d),u.on("close",()=>{let k=g.findIndex(v=>v.ws===u);k!==-1&&g.splice(k,1)})},L=(l,u,d,g,k)=>{let{cleanupList:v,connectionList:M,context:O}=c.get(u);rt(v),M.forEach(({ws:D})=>D.removeAllListeners()),u.removeAllListeners(),h(l,u,d,O,g,k),M.forEach(({ws:D,req:T})=>S(u,D,T,M))};(j=o.on)==null||j.call(o,"mock:update-end",l=>{if(!r.has(l))return;let u=r.get(l);if(u)for(let d of u.values())for(let g of o.mockData[d]){if(!g.ws||g.__filepath__!==l)return;let k=a(d);for(let[v,M]of k.entries())L(k,M,g,v,l)}}),t==null||t.on("upgrade",(l,u,d)=>{let{pathname:g,query:k}=W(l.url);if(!g||e.length===0||!e.some(w=>G(w,l.url)))return;let v=o.mockData,M=Object.keys(v).find(w=>(0,Me.pathToRegexp)(w).test(g));if(!M)return;let O=v[M].find(w=>w.url&&w.ws&&(0,Me.pathToRegexp)(w.url).test(g));if(!O)return;let D=O.__filepath__;m(D,M);let T=a(M),N=p(T,g),F=c.get(N);if(!F){let w=[],Re={onCleanup:lt=>w.push(lt)};F={cleanupList:w,context:Re,connectionList:[]},c.set(N,F),h(T,N,O,Re,g,D)}let P=l,z=new nt.default(l,l,n),{query:C}=W(l.headers.referer||"");P.query=k,P.refererQuery=C,P.params=K(M,g),P.getCookie=z.get.bind(z),N.handleUpgrade(P,u,d,w=>{s.info(`${B.default.magenta(B.default.bold("WebSocket"))} ${B.default.green(l.url)} connected ${B.default.dim(`(${D})`)}`,O.log),F.connectionList.push({req:P,ws:w}),S(N,w,P,F.connectionList)})}),t==null||t.on("close",()=>{for(let l of i.values()){for(let u of l.values()){let d=c.get(u);rt(d.cleanupList),u.close()}l.clear()}i.clear(),r.clear()})}function rt(o){let t;for(;t=o.shift();)t==null||t()}function xe(o,t,e,n){let s=ae("vite:mock",(0,J.isBoolean)(t.log)?t.log?"info":"error":t.log),r=new ue({include:(0,J.toArray)(t.include),exclude:(0,J.toArray)(t.exclude),define:pe(o),alias:o.resolve.alias});r.load(),r.on("mock:update-end",()=>{t.reload&&(n==null||n.send({type:"full-reload"}))}),e==null||e.on("close",()=>r.close());let{httpProxies:i}=se(o.server.proxy||{}),a=[...(0,J.toArray)(t.prefix),...i];be({loader:r,httpServer:e,proxies:(0,J.toArray)(t.wsPrefix),cookiesOptions:t.cookiesOptions,logger:s});let p=[];return p.push(Ht(r,a,o,t),ye(r,{formidableOptions:t.formidableOptions,proxies:a,cookiesOptions:t.cookiesOptions,logger:s})),p.filter(Boolean)}function Ht(o,t,e,n){let s={},r=n.cors===!1?!1:e.server.cors!==!1;return r&&e.server.cors!==!1&&(s={...s,...typeof e.server.cors=="boolean"?{}:e.server.cors}),r&&n.cors!==!1&&(s={...s,...typeof n.cors=="boolean"?{}:n.cors}),r?function(i,c,a){let{pathname:p}=W(i.url);if(!p||t.length===0||!t.some(S=>G(S,i.url)))return a();let m=o.mockData;if(!Object.keys(m).find(S=>(0,ct.pathToRegexp)(S).test(p)))return a();(0,it.default)(s)(i,c,a)}:void 0}function we({prefix:o=[],wsPrefix:t=[],include:e=["mock/**/*.mock.{js,ts,cjs,mjs,json,json5}"],exclude:n=["**/node_modules/**","**/.vscode/**","**/.git/**"],reload:s=!1,log:r="info",cors:i=!0,formidableOptions:c={},build:a=!1,cookiesOptions:p={}}={}){let m={prefix:o,wsPrefix:t,include:e,exclude:n,reload:s,cors:i,cookiesOptions:p,log:r,formidableOptions:{multiples:!0,...c},build:a?Object.assign({serverPort:8080,dist:"mockServer"},typeof a=="object"?a:{}):!1},h=[qt(m)];return m.build&&h.push(Ut(m)),h}function Ut(o){let t={};return{name:"vite-plugin-mock-dev-server-generator",enforce:"post",apply:"build",configResolved(e){t=e,e.logger.warn("")},async buildEnd(e){e||t.command==="build"&&await Ge(this,t,o)}}}function qt(o){let t={};return{name:"vite-plugin-mock-dev-server",enforce:"pre",apply:"serve",config(e){var r;let n=(0,at.toArray)(o.wsPrefix);if(n.length===0||!((r=e.server)!=null&&r.proxy)||Object.keys(e.server.proxy).length===0)return;let s={};Object.keys(e.server.proxy).forEach(i=>{n.includes(i)||(s[i]=e.server.proxy[i])}),e.server.proxy=s},configResolved(e){t=e,e.logger.warn("")},configureServer({middlewares:e,config:n,httpServer:s,ws:r}){xe(n,o,s,r).forEach(c=>e.use(c))},configurePreviewServer({middlewares:e,httpServer:n}){xe(t,o,n).forEach(r=>e.use(r))}}}var pt=require("@pengzhanbo/utils");function Bt(o){return o}function Jt(o){return e=>((0,pt.isArray)(e)?e=e.map(n=>o(n)||n):e=o(e)||e,e)}var A=require("@pengzhanbo/utils"),Se=new Map,Oe=new WeakMap,At=70,Ce=class{value;#e;#t;constructor(t){this.value=t,this.#e=(0,A.deepClone)(t),this.#t=Date.now()}hotUpdate(t){Date.now()-this.#t<At||(0,A.deepEqual)(t,this.#e)||(this.value=t,this.#e=(0,A.deepClone)(t),this.#t=Date.now())}};function zt(o,t){Se.has(o)||Se.set(o,new Ce(t));let e=Se.get(o);if(e.hotUpdate(t),Oe.has(e))return Oe.get(e);let n=[()=>e.value,s=>{(0,A.isFunction)(s)&&(s=s(e.value)??e.value),e.value=s}];return Object.defineProperty(n,"value",{get(){return e.value},set(s){e.value=s}}),Oe.set(e,n),n}var Gt=we;0&&(module.exports={baseMiddleware,createDefineMock,defineMock,defineMockData,mockDevServerPlugin,mockWebSocket,transformMockData});
package/dist/index.d.cts CHANGED
@@ -496,6 +496,23 @@ declare function defineMock(config: MockOptions): MockOptions;
496
496
  */
497
497
  declare function createDefineMock(transformer: (mock: MockHttpItem | MockWebsocketItem) => MockHttpItem | MockWebsocketItem | void): typeof defineMock;
498
498
 
499
+ type MockData<T = any> = readonly [
500
+ /**
501
+ * getter
502
+ */
503
+ () => T,
504
+ /**
505
+ * setter
506
+ */
507
+ (val: T | ((val: T) => T | void)) => void
508
+ ] & {
509
+ /**
510
+ * @property getter/setter
511
+ */
512
+ value: T;
513
+ };
514
+ declare function defineMockData<T = any>(key: string, initialData: T): MockData<T>;
515
+
499
516
  interface Logger {
500
517
  info(msg: string, level?: boolean | LogLevel): void;
501
518
  warn(msg: string, level?: boolean | LogLevel): void;
@@ -567,4 +584,4 @@ declare function mockWebSocket({ loader, httpServer, proxies, cookiesOptions, lo
567
584
 
568
585
  declare function transformMockData(mockList: Map<string, MockHttpItem | MockWebsocketItem | MockOptions> | (MockHttpItem | MockWebsocketItem | MockOptions)[]): Record<string, MockOptions>;
569
586
 
570
- export { BaseMiddlewareOptions, FormidableFile, MockHttpItem, MockOptions, MockRequest, MockServerPluginOptions, MockSocketOptions, MockWebsocketItem, baseMiddleware, createDefineMock, mockDevServerPlugin as default, defineMock, mockDevServerPlugin, mockWebSocket, transformMockData };
587
+ export { BaseMiddlewareOptions, FormidableFile, MockData, MockHttpItem, MockOptions, MockRequest, MockServerPluginOptions, MockSocketOptions, MockWebsocketItem, baseMiddleware, createDefineMock, mockDevServerPlugin as default, defineMock, defineMockData, mockDevServerPlugin, mockWebSocket, transformMockData };
package/dist/index.d.ts CHANGED
@@ -496,6 +496,23 @@ declare function defineMock(config: MockOptions): MockOptions;
496
496
  */
497
497
  declare function createDefineMock(transformer: (mock: MockHttpItem | MockWebsocketItem) => MockHttpItem | MockWebsocketItem | void): typeof defineMock;
498
498
 
499
+ type MockData<T = any> = readonly [
500
+ /**
501
+ * getter
502
+ */
503
+ () => T,
504
+ /**
505
+ * setter
506
+ */
507
+ (val: T | ((val: T) => T | void)) => void
508
+ ] & {
509
+ /**
510
+ * @property getter/setter
511
+ */
512
+ value: T;
513
+ };
514
+ declare function defineMockData<T = any>(key: string, initialData: T): MockData<T>;
515
+
499
516
  interface Logger {
500
517
  info(msg: string, level?: boolean | LogLevel): void;
501
518
  warn(msg: string, level?: boolean | LogLevel): void;
@@ -567,4 +584,4 @@ declare function mockWebSocket({ loader, httpServer, proxies, cookiesOptions, lo
567
584
 
568
585
  declare function transformMockData(mockList: Map<string, MockHttpItem | MockWebsocketItem | MockOptions> | (MockHttpItem | MockWebsocketItem | MockOptions)[]): Record<string, MockOptions>;
569
586
 
570
- export { BaseMiddlewareOptions, FormidableFile, MockHttpItem, MockOptions, MockRequest, MockServerPluginOptions, MockSocketOptions, MockWebsocketItem, baseMiddleware, createDefineMock, mockDevServerPlugin as default, defineMock, mockDevServerPlugin, mockWebSocket, transformMockData };
587
+ export { BaseMiddlewareOptions, FormidableFile, MockData, MockHttpItem, MockOptions, MockRequest, MockServerPluginOptions, MockSocketOptions, MockWebsocketItem, baseMiddleware, createDefineMock, mockDevServerPlugin as default, defineMock, defineMockData, mockDevServerPlugin, mockWebSocket, transformMockData };
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import{toArray as Jt}from"@pengzhanbo/utils";import rt from"node:fs";import K from"node:fs/promises";import H from"node:path";import{toArray as X}from"@pengzhanbo/utils";import nt from"fast-glob";import st from"is-core-module";import{createFilter as it,normalizePath as ct}from"vite";var me="vite-plugin-mock-dev-server",ue="1.3.0";import ge,{promises as se}from"node:fs";import{createRequire as Ae}from"node:module";import ne from"node:path";import{pathToFileURL as ze}from"node:url";import{build as Ge}from"esbuild";import Qe from"json5";import oe from"node:fs";import re from"node:path";import{parse as He}from"node:querystring";import{URL as Fe,fileURLToPath as qe}from"node:url";import Ue from"debug";import{match as Be}from"path-to-regexp";var Je=o=>o!==null&&typeof o=="object"&&typeof o.pipe=="function",de=o=>Je(o)&&o.readable!==!1&&typeof o._read=="function"&&typeof o._readableState=="object";function fe(o){return re.dirname(qe(o))}var A=Ue("vite:mock-dev-server");function q(o,t,e){for(let s of t){let r=re.join(o,s);if(oe.existsSync(r)&&oe.statSync(r).isFile()){let i=e!=null&&e.pathOnly?r:oe.readFileSync(r,"utf-8");if(!(e!=null&&e.predicate)||e.predicate(i))return i}}let n=re.dirname(o);if(n!==o&&(!(e!=null&&e.rootDir)||n.startsWith(e==null?void 0:e.rootDir)))return q(n,t,e)}var z=(o={})=>{let t=[],e=[];return Object.keys(o).forEach(n=>{var r,i;let s=o[n];typeof s=="string"||!s.ws&&!((r=s.target)!=null&&r.toString().startsWith("ws:"))&&!((i=s.target)!=null&&i.toString().startsWith("wss:"))?t.push(n):e.push(n)}),{httpProxies:t,wsProxies:e}};function N(o,t){return o[0]==="^"&&new RegExp(o).test(t)||t.startsWith(o)}function U(o,t){return(Be(o,{decode:decodeURIComponent})(t)||{params:{}}).params||{}}function R(o){let t=new Fe(o,"http://example.com"),e=decodeURIComponent(t.pathname),n=He(t.search.replace(/^\?/,""));return{pathname:e,query:n}}var Ve={name:"externalize-deps",setup(o){o.onResolve({filter:/.*/},({path:t})=>{if(t[0]!=="."&&!ne.isAbsolute(t))return{external:!0}})}},Ke={name:"json5-loader",setup(o){o.onLoad({filter:/\.json5$/},async({path:t})=>{let e=await se.readFile(t,"utf-8");return{contents:`export default ${JSON.stringify(Qe.parse(e))}`,loader:"js"}})}},Xe={name:"json-loader",setup(o){o.onLoad({filter:/\.json$/},async({path:t})=>({contents:`export default ${await se.readFile(t,"utf-8")}`,loader:"js"}))}},Ye=o=>({name:"alias-plugin",setup(t){t.onResolve({filter:/.*/},async({path:e})=>{let n=o.find(({find:c})=>Ze(c,e));if(!n)return null;let{find:s,replacement:r}=n;return{path:(await t.resolve(e.replace(s,r),{kind:"import-statement",resolveDir:r,namespace:"file"})).path,external:!1}})}});function Ze(o,t){return o instanceof RegExp?o.test(t):t.length<o.length?!1:t===o?!0:t.startsWith(`${o}/`)}async function G(o,t){var r;let{isESM:e=!0,define:n,alias:s}=t;try{let i=await Ge({entryPoints:[o],outfile:"out.js",write:!1,target:["node14.18","node16"],platform:"node",bundle:!0,metafile:!0,format:e?"esm":"cjs",define:n,plugins:[Ye(s),Ve,Xe,Ke]});return{code:i.outputFiles[0].text,deps:((r=i.metafile)==null?void 0:r.inputs)||{}}}catch(i){console.error(i)}return{code:"",deps:{}}}var et=fe(import.meta.url),_=Ae(et);async function ke(o,t,e,n){if(e){let s=`${o}.timestamp-${Date.now()}`,r=`${s}.mjs`,i=`${ze(s)}.mjs`;await se.writeFile(r,t,"utf8");try{return await import(i)}finally{try{ge.unlinkSync(r)}catch{}}}else{o=ne.resolve(n,o);let s=ne.extname(o),r=ge.realpathSync(o),i=s in _.extensions?s:".js",c=_.extensions[i];_.extensions[i]=(p,m)=>{m===r?p._compile(t,m):c(p,m)},delete _.cache[_.resolve(o)];let a=_(o);return _.extensions[i]=c,a.__esModule?a:{default:a}}}import he from"picocolors";import{isBoolean as tt}from"@pengzhanbo/utils";import I from"picocolors";var ye={silent:0,error:1,warn:2,info:3};function Q(o,t="info"){o=`[${o}]`;function e(s,r,i){if(i=tt(i)?i?t:"error":i,ye[i]>=ye[s]){let a=s==="info"?"log":s,p=s==="info"?I.cyan(I.bold(o)):s==="warn"?I.yellow(I.bold(o)):I.red(I.bold(o)),m=`${I.dim(new Date().toLocaleTimeString())} ${p} ${r}`;console[a](m)}}return{info(s,r=t){e("info",s,r)},warn(s,r=t){e("warn",s,r)},error(s,r=t){e("error",s,r)}}}var ot=/import\.meta\.env\.(.+)/;function V(o){let t=Q("vite:mock-dev-server","warn"),e={},n=process.env.NODE_ENV||o.mode;Object.assign(e,{"process.env.NODE_ENV":JSON.stringify(n),"global.process.env.NODE_ENV":JSON.stringify(n),"globalThis.process.env.NODE_ENV":JSON.stringify(n),__vite_process_env_NODE_ENV:JSON.stringify(n)});let s={},r={},i=[];for(let p in o.define){let m=o.define[p];if(typeof m=="string")try{JSON.parse(m),s[p]=m}catch{i.push(p)}else s[p]=JSON.stringify(m);let k=p.match(ot);k&&s[p]&&(r[k[1]]=`__vite__define__${s[p]}`)}i.length&&t.warn(`The following keys: ${he.yellow(he.underline(i.join(", ")))} declared in 'define' cannot be parsed as regular code snippets.`);let c={},a={};c["import.meta.hot"]="undefined";for(let p in o.env)c[`import.meta.env.${p}`]=JSON.stringify(o.env[p]);return Object.assign(a,{"import.meta.env":JSON.stringify({...o.env,...r}).replace(/"__vite__define__(.+?)"([,}])/g,(p,m,k)=>`${m.replace(/(^\\")|(\\"$)/g,'"')}${k}`)}),{...c,...s,...a,...e}}async function ve(o,t,e){let n=X(e.include),s=X(e.exclude),r=V(t),{httpProxies:i}=z(t.server.proxy||{});i.push(...X(e.prefix));let c=X(e.wsPrefix),a={};try{let u=q(t.root,["package.json"]);u&&(a=JSON.parse(u))}catch{}let p=e.build.dist,m=await mt(process.cwd(),n,s),k=H.join(t.root,`mock-data-${Date.now()}.js`);await K.writeFile(k,m,"utf-8");let{code:w,deps:j}=await G(k,{define:r,alias:t.resolve.alias}),P=at(j);await K.unlink(k);let l=[{filename:H.join(p,"mock-data.js"),source:w},{filename:H.join(p,"index.js"),source:lt(i,c,e.cookiesOptions,e.build.serverPort)},{filename:H.join(p,"package.json"),source:pt(a,P)}];try{if(H.isAbsolute(p)){await K.rm(p,{recursive:!0}),rt.mkdirSync(p,{recursive:!0});for(let{filename:u,source:d}of l)await K.writeFile(u,d,"utf-8")}else for(let{filename:u,source:d}of l)o.emitFile({type:"asset",fileName:u,source:d})}catch{}}function at(o){let t=new Set,e=[me,"connect","cors"];return Object.keys(o).forEach(n=>{o[n].imports.filter(r=>r.external&&!r.path.startsWith("<define:")).map(r=>r.path).forEach(r=>{!e.includes(r)&&!st(r)&&t.add(r)})}),Array.from(t)}function pt(o,t){let{dependencies:e={},devDependencies:n={}}=o,s={...e,...n},r={name:"mock-server",type:"module",scripts:{start:"node index.js"},dependencies:{connect:"^3.7.0","vite-plugin-mock-dev-server":`^${ue}`,cors:"^2.8.5"},pnpm:{peerDependencyRules:{ignoreMissing:["vite"]}}};return t.forEach(i=>{r.dependencies[i]=s[i]||"latest"}),JSON.stringify(r,null,2)}function lt(o,t,e={},n=8080){return`import { createServer } from 'node:http';
1
+ import{toArray as Qt}from"@pengzhanbo/utils";import ct from"node:fs";import K from"node:fs/promises";import F from"node:path";import{toArray as X}from"@pengzhanbo/utils";import at from"fast-glob";import pt from"is-core-module";import{createFilter as lt,normalizePath as mt}from"vite";var fe="vite-plugin-mock-dev-server",ge="1.3.1";import he,{promises as se}from"node:fs";import{createRequire as Ve}from"node:module";import ne from"node:path";import{pathToFileURL as Ke}from"node:url";import{build as Xe}from"esbuild";import Ye from"json5";import oe from"node:fs";import re from"node:path";import{parse as Be}from"node:querystring";import{URL as Je,fileURLToPath as Ae}from"node:url";import ze from"debug";import{match as Ge}from"path-to-regexp";var Qe=o=>o!==null&&typeof o=="object"&&typeof o.pipe=="function",ke=o=>Qe(o)&&o.readable!==!1&&typeof o._read=="function"&&typeof o._readableState=="object";function ye(o){return re.dirname(Ae(o))}var A=ze("vite:mock-dev-server");function U(o,t,e){for(let s of t){let r=re.join(o,s);if(oe.existsSync(r)&&oe.statSync(r).isFile()){let i=e!=null&&e.pathOnly?r:oe.readFileSync(r,"utf-8");if(!(e!=null&&e.predicate)||e.predicate(i))return i}}let n=re.dirname(o);if(n!==o&&(!(e!=null&&e.rootDir)||n.startsWith(e==null?void 0:e.rootDir)))return U(n,t,e)}var z=(o={})=>{let t=[],e=[];return Object.keys(o).forEach(n=>{var r,i;let s=o[n];typeof s=="string"||!s.ws&&!((r=s.target)!=null&&r.toString().startsWith("ws:"))&&!((i=s.target)!=null&&i.toString().startsWith("wss:"))?t.push(n):e.push(n)}),{httpProxies:t,wsProxies:e}};function N(o,t){return o[0]==="^"&&new RegExp(o).test(t)||t.startsWith(o)}function q(o,t){return(Ge(o,{decode:decodeURIComponent})(t)||{params:{}}).params||{}}function R(o){let t=new Je(o,"http://example.com"),e=decodeURIComponent(t.pathname),n=Be(t.search.replace(/^\?/,""));return{pathname:e,query:n}}var Ze={name:"externalize-deps",setup(o){o.onResolve({filter:/.*/},({path:t})=>{if(t[0]!=="."&&!ne.isAbsolute(t))return{external:!0}})}},et={name:"json5-loader",setup(o){o.onLoad({filter:/\.json5$/},async({path:t})=>{let e=await se.readFile(t,"utf-8");return{contents:`export default ${JSON.stringify(Ye.parse(e))}`,loader:"js"}})}},tt={name:"json-loader",setup(o){o.onLoad({filter:/\.json$/},async({path:t})=>({contents:`export default ${await se.readFile(t,"utf-8")}`,loader:"js"}))}},ot=o=>({name:"alias-plugin",setup(t){t.onResolve({filter:/.*/},async({path:e})=>{let n=o.find(({find:c})=>rt(c,e));if(!n)return null;let{find:s,replacement:r}=n;return{path:(await t.resolve(e.replace(s,r),{kind:"import-statement",resolveDir:r,namespace:"file"})).path,external:!1}})}});function rt(o,t){return o instanceof RegExp?o.test(t):t.length<o.length?!1:t===o?!0:t.startsWith(`${o}/`)}async function G(o,t){var r;let{isESM:e=!0,define:n,alias:s}=t;try{let i=await Xe({entryPoints:[o],outfile:"out.js",write:!1,target:["node14.18","node16"],platform:"node",bundle:!0,metafile:!0,format:e?"esm":"cjs",define:n,plugins:[ot(s),Ze,tt,et]});return{code:i.outputFiles[0].text,deps:((r=i.metafile)==null?void 0:r.inputs)||{}}}catch(i){console.error(i)}return{code:"",deps:{}}}var nt=ye(import.meta.url),_=Ve(nt);async function ve(o,t,e,n){if(e){let s=`${o}.timestamp-${Date.now()}`,r=`${s}.mjs`,i=`${Ke(s)}.mjs`;await se.writeFile(r,t,"utf8");try{return await import(i)}finally{try{he.unlinkSync(r)}catch{}}}else{o=ne.resolve(n,o);let s=ne.extname(o),r=he.realpathSync(o),i=s in _.extensions?s:".js",c=_.extensions[i];_.extensions[i]=(p,m)=>{m===r?p._compile(t,m):c(p,m)},delete _.cache[_.resolve(o)];let a=_(o);return _.extensions[i]=c,a.__esModule?a:{default:a}}}import be from"picocolors";import{isBoolean as st}from"@pengzhanbo/utils";import I from"picocolors";var Me={silent:0,error:1,warn:2,info:3};function Q(o,t="info"){o=`[${o}]`;function e(s,r,i){if(i=st(i)?i?t:"error":i,Me[i]>=Me[s]){let a=s==="info"?"log":s,p=s==="info"?I.cyan(I.bold(o)):s==="warn"?I.yellow(I.bold(o)):I.red(I.bold(o)),m=`${I.dim(new Date().toLocaleTimeString())} ${p} ${r}`;console[a](m)}}return{info(s,r=t){e("info",s,r)},warn(s,r=t){e("warn",s,r)},error(s,r=t){e("error",s,r)}}}var it=/import\.meta\.env\.(.+)/;function V(o){let t=Q("vite:mock-dev-server","warn"),e={},n=process.env.NODE_ENV||o.mode;Object.assign(e,{"process.env.NODE_ENV":JSON.stringify(n),"global.process.env.NODE_ENV":JSON.stringify(n),"globalThis.process.env.NODE_ENV":JSON.stringify(n),__vite_process_env_NODE_ENV:JSON.stringify(n)});let s={},r={},i=[];for(let p in o.define){let m=o.define[p];if(typeof m=="string")try{JSON.parse(m),s[p]=m}catch{i.push(p)}else s[p]=JSON.stringify(m);let k=p.match(it);k&&s[p]&&(r[k[1]]=`__vite__define__${s[p]}`)}i.length&&t.warn(`The following keys: ${be.yellow(be.underline(i.join(", ")))} declared in 'define' cannot be parsed as regular code snippets.`);let c={},a={};c["import.meta.hot"]="undefined";for(let p in o.env)c[`import.meta.env.${p}`]=JSON.stringify(o.env[p]);return Object.assign(a,{"import.meta.env":JSON.stringify({...o.env,...r}).replace(/"__vite__define__(.+?)"([,}])/g,(p,m,k)=>`${m.replace(/(^\\")|(\\"$)/g,'"')}${k}`)}),{...c,...s,...a,...e}}async function xe(o,t,e){let n=X(e.include),s=X(e.exclude),r=V(t),{httpProxies:i}=z(t.server.proxy||{});i.push(...X(e.prefix));let c=X(e.wsPrefix),a={};try{let u=U(t.root,["package.json"]);u&&(a=JSON.parse(u))}catch{}let p=e.build.dist,m=await gt(process.cwd(),n,s),k=F.join(t.root,`mock-data-${Date.now()}.js`);await K.writeFile(k,m,"utf-8");let{code:w,deps:j}=await G(k,{define:r,alias:t.resolve.alias}),P=ut(j);await K.unlink(k);let l=[{filename:F.join(p,"mock-data.js"),source:w},{filename:F.join(p,"index.js"),source:ft(i,c,e.cookiesOptions,e.build.serverPort)},{filename:F.join(p,"package.json"),source:dt(a,P)}];try{if(F.isAbsolute(p)){await K.rm(p,{recursive:!0}),ct.mkdirSync(p,{recursive:!0});for(let{filename:u,source:d}of l)await K.writeFile(u,d,"utf-8")}else for(let{filename:u,source:d}of l)o.emitFile({type:"asset",fileName:u,source:d})}catch{}}function ut(o){let t=new Set,e=[fe,"connect","cors"];return Object.keys(o).forEach(n=>{o[n].imports.filter(r=>r.external&&!r.path.startsWith("<define:")).map(r=>r.path).forEach(r=>{!e.includes(r)&&!pt(r)&&t.add(r)})}),Array.from(t)}function dt(o,t){let{dependencies:e={},devDependencies:n={}}=o,s={...e,...n},r={name:"mock-server",type:"module",scripts:{start:"node index.js"},dependencies:{connect:"^3.7.0","vite-plugin-mock-dev-server":`^${ge}`,cors:"^2.8.5"},pnpm:{peerDependencyRules:{ignoreMissing:["vite"]}}};return t.forEach(i=>{r.dependencies[i]=s[i]||"latest"}),JSON.stringify(r,null,2)}function ft(o,t,e={},n=8080){return`import { createServer } from 'node:http';
2
2
  import connect from 'connect';
3
3
  import corsMiddleware from 'cors';
4
4
  import { baseMiddleware, mockWebSocket } from 'vite-plugin-mock-dev-server';
@@ -22,7 +22,7 @@ app.use(baseMiddleware({ mockData }, {
22
22
  server.listen(${n});
23
23
 
24
24
  console.log('listen: http://localhost:${n}');
25
- `}async function mt(o,t,e){let n=await nt(t,{cwd:o}),s=it(t,e,{resolve:!1}),r=n.filter(s),i="",c="";return r.forEach((a,p)=>{let m=ct(H.join(o,a));i+=`import * as m${p} from '${m}';
25
+ `}async function gt(o,t,e){let n=await at(t,{cwd:o}),s=lt(t,e,{resolve:!1}),r=n.filter(s),i="",c="";return r.forEach((a,p)=>{let m=mt(F.join(o,a));i+=`import * as m${p} from '${m}';
26
26
  `,c+=`m${p}, `}),`import { transformMockData } from 'vite-plugin-mock-dev-server';
27
27
  ${i}
28
28
  const exporters = [${c}];
@@ -40,18 +40,18 @@ const mockList = exporters.map((raw) => {
40
40
  }
41
41
  return mockConfig
42
42
  });
43
- export default transformMockData(mockList);`}import{isBoolean as Ft,toArray as te}from"@pengzhanbo/utils";import qt from"cors";import{pathToRegexp as Ut}from"path-to-regexp";import{Buffer as Oe}from"node:buffer";import{isArray as Y,isEmptyObject as ft,isFunction as Z,random as gt,sleep as kt,sortBy as yt,timestamp as Re}from"@pengzhanbo/utils";import ht from"cookies";import vt from"http-status";import*as B from"mime-types";import{pathToRegexp as Pe}from"path-to-regexp";import M from"picocolors";import ie from"co-body";import ut from"formidable";async function Me(o,t){var s;let e=o.method.toUpperCase();if(["GET","DELETE","HEAD"].includes(e))return;let n=((s=o.headers["content-type"])==null?void 0:s.toLocaleLowerCase())||"";try{if(n.startsWith("application/json"))return await ie.json(o);if(n.startsWith("application/x-www-form-urlencoded"))return await ie.form(o);if(n.startsWith("text/plain"))return await ie.text(o);if(n.startsWith("multipart/form-data"))return await dt(o,t)}catch(r){console.error(r)}}async function dt(o,t){let e=ut(t);return new Promise((n,s)=>{e.parse(o,(r,i,c)=>{if(r){s(r);return}n({...i,...c})})})}import{isArray as be,isObject as xe}from"@pengzhanbo/utils";function we(o,t){return L(o.headers,t.headers)&&L(o.body,t.body)&&L(o.params,t.params)&&L(o.query,t.query)&&L(o.refererQuery,t.refererQuery)}function L(o,t){if(!t)return!0;for(let e in t)if(!Se(o[e],t[e]))return!1;return!0}function Se(o,t){if(be(o)&&be(t)){let e=new Set;return t.every(n=>o.some((s,r)=>{if(e.has(r))return!1;let i=Se(s,n);return i&&e.add(r),i}))}return xe(o)&&xe(t)?L(o,t):Object.is(o,t)}var Mt=/:/g;function We(o,{formidableOptions:t={},proxies:e,cookiesOptions:n,logger:s}){return async function(r,i,c){let a=Re(),{query:p,pathname:m}=R(r.url);if(!m||e.length===0||!e.some(O=>N(O,r.url)))return c();let k=o.mockData,w=yt(Object.keys(k),O=>{var v;return((v=O.match(Mt))==null?void 0:v.length)||0}).find(O=>Pe(O).test(m));if(!w)return c();let{query:j}=R(r.headers.referer||""),P=await Me(r,t),l=new ht(r,i,n),u=l.get.bind(l),d=r.method.toUpperCase(),f=bt(k[w],s,{pathname:m,method:d,request:{query:p,refererQuery:j,body:P,headers:r.headers,getCookie:u}});if(!f)return c();let g=r,y=i;g.body=P,g.query=p,g.refererQuery=j,g.params=U(f.url,m),g.getCookie=u,y.setCookie=l.set.bind(l);let{body:h,delay:S,type:W="json",response:E,status:$=200,statusText:D,log:C,__filepath__:T}=f;if(ce(y,$,D),await xt(g,y,f,s),await wt(g,y,f,s),s.info(Ct(g,T),C),h){try{let O=Z(h)?await h(g):h;await Ce(a,S),St(y,O,W)}catch(O){s.error(`${M.red(`mock error at ${m}`)}
43
+ export default transformMockData(mockList);`}import{isBoolean as Jt,toArray as te}from"@pengzhanbo/utils";import At from"cors";import{pathToRegexp as zt}from"path-to-regexp";import{Buffer as Pe}from"node:buffer";import{isArray as Y,isEmptyObject as ht,isFunction as Z,random as vt,sleep as Mt,sortBy as bt,timestamp as je}from"@pengzhanbo/utils";import xt from"cookies";import wt from"http-status";import*as B from"mime-types";import{pathToRegexp as De}from"path-to-regexp";import M from"picocolors";import ie from"co-body";import kt from"formidable";async function we(o,t){var s;let e=o.method.toUpperCase();if(["GET","DELETE","HEAD"].includes(e))return;let n=((s=o.headers["content-type"])==null?void 0:s.toLocaleLowerCase())||"";try{if(n.startsWith("application/json"))return await ie.json(o);if(n.startsWith("application/x-www-form-urlencoded"))return await ie.form(o);if(n.startsWith("text/plain"))return await ie.text(o);if(n.startsWith("multipart/form-data"))return await yt(o,t)}catch(r){console.error(r)}}async function yt(o,t){let e=kt(t);return new Promise((n,s)=>{e.parse(o,(r,i,c)=>{if(r){s(r);return}n({...i,...c})})})}import{isArray as Se,isObject as Oe}from"@pengzhanbo/utils";function Ce(o,t){return D(o.headers,t.headers)&&D(o.body,t.body)&&D(o.params,t.params)&&D(o.query,t.query)&&D(o.refererQuery,t.refererQuery)}function D(o,t){if(!t)return!0;for(let e in t)if(!Re(o[e],t[e]))return!1;return!0}function Re(o,t){if(Se(o)&&Se(t)){let e=new Set;return t.every(n=>o.some((s,r)=>{if(e.has(r))return!1;let i=Re(s,n);return i&&e.add(r),i}))}return Oe(o)&&Oe(t)?D(o,t):Object.is(o,t)}var St=/:/g;function Le(o,{formidableOptions:t={},proxies:e,cookiesOptions:n,logger:s}){return async function(r,i,c){let a=je(),{query:p,pathname:m}=R(r.url);if(!m||e.length===0||!e.some(O=>N(O,r.url)))return c();let k=o.mockData,w=bt(Object.keys(k),O=>{var v;return((v=O.match(St))==null?void 0:v.length)||0}).find(O=>De(O).test(m));if(!w)return c();let{query:j}=R(r.headers.referer||""),P=await we(r,t),l=new xt(r,i,n),u=l.get.bind(l),d=r.method.toUpperCase(),f=Ot(k[w],s,{pathname:m,method:d,request:{query:p,refererQuery:j,body:P,headers:r.headers,getCookie:u}});if(!f)return c();let g=r,y=i;g.body=P,g.query=p,g.refererQuery=j,g.params=q(f.url,m),g.getCookie=u,y.setCookie=l.set.bind(l);let{body:h,delay:S,type:W="json",response:L,status:E=200,statusText:$,log:C,__filepath__:T}=f;if(ce(y,E,$),await Ct(g,y,f,s),await Rt(g,y,f,s),s.info(jt(g,T),C),h){try{let O=Z(h)?await h(g):h;await We(a,S),Pt(y,O,W)}catch(O){s.error(`${M.red(`mock error at ${m}`)}
44
44
  ${O}
45
- at body (${M.underline(T)})`,C),ce(y,500),i.end("")}return}if(E){try{await Ce(a,S),await E(g,y,c)}catch(O){s.error(`${M.red(`mock error at ${m}`)}
45
+ at body (${M.underline(T)})`,C),ce(y,500),i.end("")}return}if(L){try{await We(a,S),await L(g,y,c)}catch(O){s.error(`${M.red(`mock error at ${m}`)}
46
46
  ${O}
47
- at response (${M.underline(T)})`,C),ce(y,500),i.end("")}return}i.end("")}}function bt(o,t,{pathname:e,method:n,request:s}){return o.find(r=>{if(!e||!r||!r.url||r.ws===!0||!(r.method?Y(r.method)?r.method:[r.method]:["GET","POST"]).includes(n))return!1;let c=Pe(r.url).test(e);if(c&&r.validator){let a=U(r.url,e);if(Z(r.validator))return r.validator({params:a,...s});try{return we({params:a,...s},r.validator)}catch(p){let m=r.__filepath__;return t.error(`${M.red(`mock error at ${e}`)}
47
+ at response (${M.underline(T)})`,C),ce(y,500),i.end("")}return}i.end("")}}function Ot(o,t,{pathname:e,method:n,request:s}){return o.find(r=>{if(!e||!r||!r.url||r.ws===!0||!(r.method?Y(r.method)?r.method:[r.method]:["GET","POST"]).includes(n))return!1;let c=De(r.url).test(e);if(c&&r.validator){let a=q(r.url,e);if(Z(r.validator))return r.validator({params:a,...s});try{return Ce({params:a,...s},r.validator)}catch(p){let m=r.__filepath__;return t.error(`${M.red(`mock error at ${e}`)}
48
48
  ${p}
49
- at validator (${M.underline(m)})`,r.log),!1}}return c})}function ce(o,t=200,e){o.statusCode=t,o.statusMessage=e||Ot(t)}async function xt(o,t,e,n){let{headers:s,type:r="json"}=e,i=e.__filepath__,c=B.contentType(r)||B.contentType(B.lookup(r)||"");if(c&&t.setHeader("Content-Type",c),t.setHeader("Cache-Control","no-cache,max-age=0"),t.setHeader("X-Mock-Power-By","vite-plugin-mock-dev-server"),t.setHeader("X-File-Path",i),!!s)try{let a=Z(s)?await s(o):s;Object.keys(a).forEach(p=>{t.setHeader(p,a[p])})}catch(a){n.error(`${M.red(`mock error at ${o.url.split("?")[0]}`)}
49
+ at validator (${M.underline(m)})`,r.log),!1}}return c})}function ce(o,t=200,e){o.statusCode=t,o.statusMessage=e||Wt(t)}async function Ct(o,t,e,n){let{headers:s,type:r="json"}=e,i=e.__filepath__,c=B.contentType(r)||B.contentType(B.lookup(r)||"");if(c&&t.setHeader("Content-Type",c),t.setHeader("Cache-Control","no-cache,max-age=0"),t.setHeader("X-Mock-Power-By","vite-plugin-mock-dev-server"),t.setHeader("X-File-Path",i),!!s)try{let a=Z(s)?await s(o):s;Object.keys(a).forEach(p=>{t.setHeader(p,a[p])})}catch(a){n.error(`${M.red(`mock error at ${o.url.split("?")[0]}`)}
50
50
  ${a}
51
- at headers (${M.underline(i)})`,e.log)}}async function wt(o,t,e,n){let{cookies:s}=e,r=e.__filepath__;if(s)try{let i=Z(s)?await s(o):s;Object.keys(i).forEach(c=>{let a=i[c];if(Y(a)){let[p,m]=a;t.setCookie(c,p,m)}else t.setCookie(c,a)})}catch(i){n.error(`${M.red(`mock error at ${o.url.split("?")[0]}`)}
51
+ at headers (${M.underline(i)})`,e.log)}}async function Rt(o,t,e,n){let{cookies:s}=e,r=e.__filepath__;if(s)try{let i=Z(s)?await s(o):s;Object.keys(i).forEach(c=>{let a=i[c];if(Y(a)){let[p,m]=a;t.setCookie(c,p,m)}else t.setCookie(c,a)})}catch(i){n.error(`${M.red(`mock error at ${o.url.split("?")[0]}`)}
52
52
  ${i}
53
- at cookies (${M.underline(r)})`,e.log)}}function St(o,t,e){if(de(t))t.pipe(o);else if(Oe.isBuffer(t))o.end(e==="text"||e==="json"?t.toString("utf-8"):t);else{let n=typeof t=="string"?t:JSON.stringify(t);o.end(e==="buffer"?Oe.from(n):n)}}async function Ce(o,t){if(!t||typeof t=="number"&&t<=0||Y(t)&&t.length!==2)return;let e=0;if(Y(t)){let[n,s]=t;e=gt(n,s)}else e=t-(Re()-o);e>0&&await kt(e)}function Ot(o){return vt[o]||"Unknown"}function Ct(o,t){let{url:e,method:n,query:s,params:r,body:i}=o,{pathname:c}=new URL(e,"http://example.com");c=M.green(decodeURIComponent(c));let a=(P,l)=>!l||ft(l)?"":` ${M.gray(`${P}:`)}${JSON.stringify(l)}`,p=M.magenta(M.bold(n)),m=a("query",s),k=a("params",r),w=a("body",i),j=` ${M.dim(M.underline(`(${t})`))}`;return`${p} ${c}${m}${k}${w}${j}`}import Lt from"node:events";import{hasOwn as Et,isArray as $t,promiseParallel as Dt,toArray as _t}from"@pengzhanbo/utils";import $e from"chokidar";import It from"fast-glob";import{createFilter as Tt,normalizePath as J}from"vite";import{isArray as Rt,isEmptyObject as je,isFunction as Le,isObject as Pt,sortBy as Wt}from"@pengzhanbo/utils";function Ee(o){let t=[];for(let[,n]of o.entries())n&&(Rt(n)?t.push(...n):t.push(n));let e={};return t.filter(n=>Pt(n)&&n.enabled!==!1&&n.url).forEach(n=>{let{pathname:s,query:r}=R(n.url),i=e[s]??=[],c={...n,url:s};if(c.ws!==!0){let a=c.validator;je(r)||(Le(a)?c.validator=function(p){return L(p.query,r)&&a(p)}:a?(c.validator={...a},c.validator.query=c.validator.query?{...r,...c.validator.query}:r):c.validator={query:r})}i.push(c)}),Object.keys(e).forEach(n=>{e[n]=Wt(e[n],s=>{if(s.ws===!0)return 0;let{validator:r}=s;return!r||je(r)?2:Le(r)?0:1/Object.keys(r).reduce((c,a)=>c+jt(r[a]),0)})}),e}function jt(o){return o?Object.keys(o).length:0}var ee=class extends Lt{constructor(e){super();this.options=e;this.cwd=e.cwd||process.cwd();try{let n=q(this.cwd,["package.json"]);this.moduleType=n&&JSON.parse(n).type==="module"?"esm":"cjs"}catch{}}moduleCache=new Map;moduleDeps=new Map;cwd;mockWatcher;depsWatcher;moduleType="cjs";_mockData={};get mockData(){return this._mockData}load(){let{include:e,exclude:n}=this.options,s=Tt(e,n,{resolve:!1});It(e,{cwd:this.cwd}).then(i=>i.filter(s).map(c=>()=>this.loadMock(c))).then(i=>Dt(i,10)).then(()=>this.updateMockList()),this.watchMockEntry(),this.watchDeps();let r=null;this.on("mock:update",async i=>{s(i)&&(await this.loadMock(i),r&&clearImmediate(r),r=setImmediate(()=>{this.updateMockList(),this.emit("mock:update-end",i),r=null}))}),this.on("mock:unlink",async i=>{s(i)&&(this.moduleCache.delete(i),this.updateMockList(),this.emit("mock:update-end",i))})}watchMockEntry(){let{include:e}=this.options,[n,...s]=e,r=$e.watch(n,{ignoreInitial:!0,cwd:this.cwd});s.length>0&&s.forEach(i=>r.add(i)),r.on("add",async i=>{i=J(i),this.emit("mock:update",i),A("watcher:add",i)}),r.on("change",async i=>{i=J(i),this.emit("mock:update",i),A("watcher:change",i)}),r.on("unlink",async i=>{i=J(i),this.emit("mock:unlink",i),A("watcher:unlink",i)}),this.mockWatcher=r}watchDeps(){let e=[];this.depsWatcher=$e.watch([],{ignoreInitial:!0,cwd:this.cwd}),this.depsWatcher.on("change",n=>{n=J(n);let s=this.moduleDeps.get(n);s&&s.forEach(r=>{this.emit("mock:update",r)})}),this.depsWatcher.on("unlink",n=>{n=J(n),this.moduleDeps.delete(n)}),this.on("update:deps",()=>{let n=[];for(let[r]of this.moduleDeps.entries())n.push(r);let s=n.filter(r=>!e.includes(r));s.length>0&&this.depsWatcher.add(s)})}close(){var e,n;(e=this.mockWatcher)==null||e.close(),(n=this.depsWatcher)==null||n.close()}updateMockList(){this._mockData=Ee(this.moduleCache)}updateModuleDeps(e,n){Object.keys(n).forEach(s=>{n[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 n=!1;/\.m[jt]s$/.test(e)?n=!0:/\.c[jt]s$/.test(e)?n=!1:n=this.moduleType==="esm";let{define:s,alias:r}=this.options,{code:i,deps:c}=await G(e,{isESM:n,define:s,alias:r});try{let a=await ke(e,i,n,this.cwd)||{},p;Et(a,"default")?p=a.default:(p=[],Object.keys(a).forEach(m=>p.push(..._t(a[m])))),$t(p)?p.forEach(m=>m.__filepath__=e):p.__filepath__=e,this.moduleCache.set(e,p),this.updateModuleDeps(e,c)}catch(a){console.error(a)}}};import Nt from"cookies";import{pathToRegexp as De}from"path-to-regexp";import F from"picocolors";import{WebSocketServer as Ht}from"ws";function Ie({loader:o,httpServer:t,proxies:e,cookiesOptions:n,logger:s}){var P;let r=new Map,i=new Map,c=new WeakMap,a=l=>{let u=i.get(l);return!u&&i.set(l,u=new Map),u},p=(l,u)=>{let d=l.get(u);return!d&&l.set(u,d=new Ht({noServer:!0})),d},m=(l,u)=>{let d=r.get(l);!d&&r.set(l,d=new Set),d.add(u)},k=(l,u,d,f,g,y)=>{var h;try{(h=d.setup)==null||h.call(d,u,f),u.on("close",()=>l.delete(g)),u.on("error",S=>{s.error(`${F.red(`WebSocket mock error at ${u.path}`)}
53
+ at cookies (${M.underline(r)})`,e.log)}}function Pt(o,t,e){if(ke(t))t.pipe(o);else if(Pe.isBuffer(t))o.end(e==="text"||e==="json"?t.toString("utf-8"):t);else{let n=typeof t=="string"?t:JSON.stringify(t);o.end(e==="buffer"?Pe.from(n):n)}}async function We(o,t){if(!t||typeof t=="number"&&t<=0||Y(t)&&t.length!==2)return;let e=0;if(Y(t)){let[n,s]=t;e=vt(n,s)}else e=t-(je()-o);e>0&&await Mt(e)}function Wt(o){return wt[o]||"Unknown"}function jt(o,t){let{url:e,method:n,query:s,params:r,body:i}=o,{pathname:c}=new URL(e,"http://example.com");c=M.green(decodeURIComponent(c));let a=(P,l)=>!l||ht(l)?"":` ${M.gray(`${P}:`)}${JSON.stringify(l)}`,p=M.magenta(M.bold(n)),m=a("query",s),k=a("params",r),w=a("body",i),j=` ${M.dim(M.underline(`(${t})`))}`;return`${p} ${c}${m}${k}${w}${j}`}import _t from"node:events";import{hasOwn as It,isArray as Tt,promiseParallel as Nt,toArray as Ft}from"@pengzhanbo/utils";import Ie from"chokidar";import Ht from"fast-glob";import{createFilter as Ut,normalizePath as J}from"vite";import{isArray as Dt,isEmptyObject as Ee,isFunction as $e,isObject as Lt,sortBy as Et}from"@pengzhanbo/utils";function _e(o){let t=[];for(let[,n]of o.entries())n&&(Dt(n)?t.push(...n):t.push(n));let e={};return t.filter(n=>Lt(n)&&n.enabled!==!1&&n.url).forEach(n=>{let{pathname:s,query:r}=R(n.url),i=e[s]??=[],c={...n,url:s};if(c.ws!==!0){let a=c.validator;Ee(r)||($e(a)?c.validator=function(p){return D(p.query,r)&&a(p)}:a?(c.validator={...a},c.validator.query=c.validator.query?{...r,...c.validator.query}:r):c.validator={query:r})}i.push(c)}),Object.keys(e).forEach(n=>{e[n]=Et(e[n],s=>{if(s.ws===!0)return 0;let{validator:r}=s;return!r||Ee(r)?2:$e(r)?0:1/Object.keys(r).reduce((c,a)=>c+$t(r[a]),0)})}),e}function $t(o){return o?Object.keys(o).length:0}var ee=class extends _t{constructor(e){super();this.options=e;this.cwd=e.cwd||process.cwd();try{let n=U(this.cwd,["package.json"]);this.moduleType=n&&JSON.parse(n).type==="module"?"esm":"cjs"}catch{}}moduleCache=new Map;moduleDeps=new Map;cwd;mockWatcher;depsWatcher;moduleType="cjs";_mockData={};get mockData(){return this._mockData}load(){let{include:e,exclude:n}=this.options,s=Ut(e,n,{resolve:!1});Ht(e,{cwd:this.cwd}).then(i=>i.filter(s).map(c=>()=>this.loadMock(c))).then(i=>Nt(i,10)).then(()=>this.updateMockList()),this.watchMockEntry(),this.watchDeps();let r=null;this.on("mock:update",async i=>{s(i)&&(await this.loadMock(i),r&&clearImmediate(r),r=setImmediate(()=>{this.updateMockList(),this.emit("mock:update-end",i),r=null}))}),this.on("mock:unlink",async i=>{s(i)&&(this.moduleCache.delete(i),this.updateMockList(),this.emit("mock:update-end",i))})}watchMockEntry(){let{include:e}=this.options,[n,...s]=e,r=this.mockWatcher=Ie.watch(n,{ignoreInitial:!0,cwd:this.cwd});s.length>0&&s.forEach(i=>r.add(i)),r.on("add",async i=>{i=J(i),this.emit("mock:update",i),A("watcher:add",i)}),r.on("change",async i=>{i=J(i),this.emit("mock:update",i),A("watcher:change",i)}),r.on("unlink",async i=>{i=J(i),this.emit("mock:unlink",i),A("watcher:unlink",i)})}watchDeps(){let e=[];this.depsWatcher=Ie.watch([],{ignoreInitial:!0,cwd:this.cwd}),this.depsWatcher.on("change",n=>{n=J(n);let s=this.moduleDeps.get(n);s&&s.forEach(r=>{this.emit("mock:update",r)})}),this.depsWatcher.on("unlink",n=>{n=J(n),this.moduleDeps.delete(n)}),this.on("update:deps",()=>{let n=[];for(let[r]of this.moduleDeps.entries())n.push(r);let s=n.filter(r=>!e.includes(r));s.length>0&&this.depsWatcher.add(s)})}close(){var e,n;(e=this.mockWatcher)==null||e.close(),(n=this.depsWatcher)==null||n.close()}updateMockList(){this._mockData=_e(this.moduleCache)}updateModuleDeps(e,n){Object.keys(n).forEach(s=>{n[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 n=!1;/\.m[jt]s$/.test(e)?n=!0:/\.c[jt]s$/.test(e)?n=!1:n=this.moduleType==="esm";let{define:s,alias:r}=this.options,{code:i,deps:c}=await G(e,{isESM:n,define:s,alias:r});try{let a=await ve(e,i,n,this.cwd)||{},p;It(a,"default")?p=a.default:(p=[],Object.keys(a).forEach(m=>p.push(...Ft(a[m])))),Tt(p)?p.forEach(m=>m.__filepath__=e):p.__filepath__=e,this.moduleCache.set(e,p),this.updateModuleDeps(e,c)}catch(a){console.error(a)}}};import qt from"cookies";import{pathToRegexp as Te}from"path-to-regexp";import H from"picocolors";import{WebSocketServer as Bt}from"ws";function Fe({loader:o,httpServer:t,proxies:e,cookiesOptions:n,logger:s}){var P;let r=new Map,i=new Map,c=new WeakMap,a=l=>{let u=i.get(l);return!u&&i.set(l,u=new Map),u},p=(l,u)=>{let d=l.get(u);return!d&&l.set(u,d=new Bt({noServer:!0})),d},m=(l,u)=>{let d=r.get(l);!d&&r.set(l,d=new Set),d.add(u)},k=(l,u,d,f,g,y)=>{var h;try{(h=d.setup)==null||h.call(d,u,f),u.on("close",()=>l.delete(g)),u.on("error",S=>{s.error(`${H.red(`WebSocket mock error at ${u.path}`)}
54
54
  ${S}
55
- at setup (${y})`,d.log)})}catch(S){s.error(`${F.red(`WebSocket mock error at ${u.path}`)}
55
+ at setup (${y})`,d.log)})}catch(S){s.error(`${H.red(`WebSocket mock error at ${u.path}`)}
56
56
  ${S}
57
- at setup (${y})`,d.log)}},w=(l,u,d,f)=>{l.emit("connection",u,d),u.on("close",()=>{let g=f.findIndex(y=>y.ws===u);g!==-1&&f.splice(g,1)})},j=(l,u,d,f,g)=>{let{cleanupList:y,connectionList:h,context:S}=c.get(u);_e(y),h.forEach(({ws:W})=>W.removeAllListeners()),u.removeAllListeners(),k(l,u,d,S,f,g),h.forEach(({ws:W,req:E})=>w(u,W,E,h))};(P=o.on)==null||P.call(o,"mock:update-end",l=>{if(!r.has(l))return;let u=r.get(l);if(u)for(let d of u.values())for(let f of o.mockData[d]){if(!f.ws||f.__filepath__!==l)return;let g=a(d);for(let[y,h]of g.entries())j(g,h,f,y,l)}}),t==null||t.on("upgrade",(l,u,d)=>{let{pathname:f,query:g}=R(l.url);if(!f||e.length===0||!e.some(v=>N(v,l.url)))return;let y=o.mockData,h=Object.keys(y).find(v=>De(v).test(f));if(!h)return;let S=y[h].find(v=>v.url&&v.ws&&De(v.url).test(f));if(!S)return;let W=S.__filepath__;m(W,h);let E=a(h),$=p(E,f),D=c.get($);if(!D){let v=[],pe={onCleanup:Ne=>v.push(Ne)};D={cleanupList:v,context:pe,connectionList:[]},c.set($,D),k(E,$,S,pe,f,W)}let C=l,T=new Nt(l,l,n),{query:O}=R(l.headers.referer||"");C.query=g,C.refererQuery=O,C.params=U(h,f),C.getCookie=T.get.bind(T),$.handleUpgrade(C,u,d,v=>{s.info(`${F.magenta(F.bold("WebSocket"))} ${F.green(l.url)} connected ${F.dim(`(${W})`)}`,S.log),D.connectionList.push({req:C,ws:v}),w($,v,C,D.connectionList)})}),t==null||t.on("close",()=>{for(let l of i.values()){for(let u of l.values()){let d=c.get(u);_e(d.cleanupList),u.close()}l.clear()}i.clear(),r.clear()})}function _e(o){let t;for(;t=o.shift();)t==null||t()}function ae(o,t,e,n){let s=Q("vite:mock",Ft(t.log)?t.log?"info":"error":t.log),r=new ee({include:te(t.include),exclude:te(t.exclude),define:V(o),alias:o.resolve.alias});r.load(),r.on("mock:update-end",()=>{t.reload&&(n==null||n.send({type:"full-reload"}))}),e==null||e.on("close",()=>r.close());let{httpProxies:i}=z(o.server.proxy||{}),a=[...te(t.prefix),...i];Ie({loader:r,httpServer:e,proxies:te(t.wsPrefix),cookiesOptions:t.cookiesOptions,logger:s});let p=[];return p.push(Bt(r,a,o,t),We(r,{formidableOptions:t.formidableOptions,proxies:a,cookiesOptions:t.cookiesOptions,logger:s})),p.filter(Boolean)}function Bt(o,t,e,n){let s={},r=n.cors===!1?!1:e.server.cors!==!1;return r&&e.server.cors!==!1&&(s={...s,...typeof e.server.cors=="boolean"?{}:e.server.cors}),r&&n.cors!==!1&&(s={...s,...typeof n.cors=="boolean"?{}:n.cors}),r?function(i,c,a){let{pathname:p}=R(i.url);if(!p||t.length===0||!t.some(w=>N(w,i.url)))return a();let m=o.mockData;if(!Object.keys(m).find(w=>Ut(w).test(p)))return a();qt(s)(i,c,a)}:void 0}function Te({prefix:o=[],wsPrefix:t=[],include:e=["mock/**/*.mock.{js,ts,cjs,mjs,json,json5}"],exclude:n=["**/node_modules/**","**/.vscode/**","**/.git/**"],reload:s=!1,log:r="info",cors:i=!0,formidableOptions:c={},build:a=!1,cookiesOptions:p={}}={}){let m={prefix:o,wsPrefix:t,include:e,exclude:n,reload:s,cors:i,cookiesOptions:p,log:r,formidableOptions:{multiples:!0,...c},build:a?Object.assign({serverPort:8080,dist:"mockServer"},typeof a=="object"?a:{}):!1},k=[zt(m)];return m.build&&k.push(At(m)),k}function At(o){let t={};return{name:"vite-plugin-mock-dev-server-generator",enforce:"post",apply:"build",configResolved(e){t=e,e.logger.warn("")},async buildEnd(e){e||t.command==="build"&&await ve(this,t,o)}}}function zt(o){let t={};return{name:"vite-plugin-mock-dev-server",enforce:"pre",apply:"serve",config(e){var r;let n=Jt(o.wsPrefix);if(n.length===0||!((r=e.server)!=null&&r.proxy)||Object.keys(e.server.proxy).length===0)return;let s={};Object.keys(e.server.proxy).forEach(i=>{n.includes(i)||(s[i]=e.server.proxy[i])}),e.server.proxy=s},configResolved(e){t=e,e.logger.warn("")},configureServer({middlewares:e,config:n,httpServer:s,ws:r}){ae(n,o,s,r).forEach(c=>e.use(c))},configurePreviewServer({middlewares:e,httpServer:n}){ae(t,o,n).forEach(r=>e.use(r))}}}import{isArray as Gt}from"@pengzhanbo/utils";function Tr(o){return o}function Nr(o){return e=>(Gt(e)?e=e.map(n=>o(n)||n):e=o(e)||e,e)}var Ur=Te;export{We as baseMiddleware,Nr as createDefineMock,Ur as default,Tr as defineMock,Te as mockDevServerPlugin,Ie as mockWebSocket,Ee as transformMockData};
57
+ at setup (${y})`,d.log)}},w=(l,u,d,f)=>{l.emit("connection",u,d),u.on("close",()=>{let g=f.findIndex(y=>y.ws===u);g!==-1&&f.splice(g,1)})},j=(l,u,d,f,g)=>{let{cleanupList:y,connectionList:h,context:S}=c.get(u);Ne(y),h.forEach(({ws:W})=>W.removeAllListeners()),u.removeAllListeners(),k(l,u,d,S,f,g),h.forEach(({ws:W,req:L})=>w(u,W,L,h))};(P=o.on)==null||P.call(o,"mock:update-end",l=>{if(!r.has(l))return;let u=r.get(l);if(u)for(let d of u.values())for(let f of o.mockData[d]){if(!f.ws||f.__filepath__!==l)return;let g=a(d);for(let[y,h]of g.entries())j(g,h,f,y,l)}}),t==null||t.on("upgrade",(l,u,d)=>{let{pathname:f,query:g}=R(l.url);if(!f||e.length===0||!e.some(v=>N(v,l.url)))return;let y=o.mockData,h=Object.keys(y).find(v=>Te(v).test(f));if(!h)return;let S=y[h].find(v=>v.url&&v.ws&&Te(v.url).test(f));if(!S)return;let W=S.__filepath__;m(W,h);let L=a(h),E=p(L,f),$=c.get(E);if(!$){let v=[],ue={onCleanup:qe=>v.push(qe)};$={cleanupList:v,context:ue,connectionList:[]},c.set(E,$),k(L,E,S,ue,f,W)}let C=l,T=new qt(l,l,n),{query:O}=R(l.headers.referer||"");C.query=g,C.refererQuery=O,C.params=q(h,f),C.getCookie=T.get.bind(T),E.handleUpgrade(C,u,d,v=>{s.info(`${H.magenta(H.bold("WebSocket"))} ${H.green(l.url)} connected ${H.dim(`(${W})`)}`,S.log),$.connectionList.push({req:C,ws:v}),w(E,v,C,$.connectionList)})}),t==null||t.on("close",()=>{for(let l of i.values()){for(let u of l.values()){let d=c.get(u);Ne(d.cleanupList),u.close()}l.clear()}i.clear(),r.clear()})}function Ne(o){let t;for(;t=o.shift();)t==null||t()}function ae(o,t,e,n){let s=Q("vite:mock",Jt(t.log)?t.log?"info":"error":t.log),r=new ee({include:te(t.include),exclude:te(t.exclude),define:V(o),alias:o.resolve.alias});r.load(),r.on("mock:update-end",()=>{t.reload&&(n==null||n.send({type:"full-reload"}))}),e==null||e.on("close",()=>r.close());let{httpProxies:i}=z(o.server.proxy||{}),a=[...te(t.prefix),...i];Fe({loader:r,httpServer:e,proxies:te(t.wsPrefix),cookiesOptions:t.cookiesOptions,logger:s});let p=[];return p.push(Gt(r,a,o,t),Le(r,{formidableOptions:t.formidableOptions,proxies:a,cookiesOptions:t.cookiesOptions,logger:s})),p.filter(Boolean)}function Gt(o,t,e,n){let s={},r=n.cors===!1?!1:e.server.cors!==!1;return r&&e.server.cors!==!1&&(s={...s,...typeof e.server.cors=="boolean"?{}:e.server.cors}),r&&n.cors!==!1&&(s={...s,...typeof n.cors=="boolean"?{}:n.cors}),r?function(i,c,a){let{pathname:p}=R(i.url);if(!p||t.length===0||!t.some(w=>N(w,i.url)))return a();let m=o.mockData;if(!Object.keys(m).find(w=>zt(w).test(p)))return a();At(s)(i,c,a)}:void 0}function He({prefix:o=[],wsPrefix:t=[],include:e=["mock/**/*.mock.{js,ts,cjs,mjs,json,json5}"],exclude:n=["**/node_modules/**","**/.vscode/**","**/.git/**"],reload:s=!1,log:r="info",cors:i=!0,formidableOptions:c={},build:a=!1,cookiesOptions:p={}}={}){let m={prefix:o,wsPrefix:t,include:e,exclude:n,reload:s,cors:i,cookiesOptions:p,log:r,formidableOptions:{multiples:!0,...c},build:a?Object.assign({serverPort:8080,dist:"mockServer"},typeof a=="object"?a:{}):!1},k=[Kt(m)];return m.build&&k.push(Vt(m)),k}function Vt(o){let t={};return{name:"vite-plugin-mock-dev-server-generator",enforce:"post",apply:"build",configResolved(e){t=e,e.logger.warn("")},async buildEnd(e){e||t.command==="build"&&await xe(this,t,o)}}}function Kt(o){let t={};return{name:"vite-plugin-mock-dev-server",enforce:"pre",apply:"serve",config(e){var r;let n=Qt(o.wsPrefix);if(n.length===0||!((r=e.server)!=null&&r.proxy)||Object.keys(e.server.proxy).length===0)return;let s={};Object.keys(e.server.proxy).forEach(i=>{n.includes(i)||(s[i]=e.server.proxy[i])}),e.server.proxy=s},configResolved(e){t=e,e.logger.warn("")},configureServer({middlewares:e,config:n,httpServer:s,ws:r}){ae(n,o,s,r).forEach(c=>e.use(c))},configurePreviewServer({middlewares:e,httpServer:n}){ae(t,o,n).forEach(r=>e.use(r))}}}import{isArray as Xt}from"@pengzhanbo/utils";function Jr(o){return o}function Ar(o){return e=>(Xt(e)?e=e.map(n=>o(n)||n):e=o(e)||e,e)}import{deepClone as Ue,deepEqual as Yt,isFunction as Zt}from"@pengzhanbo/utils";var pe=new Map,le=new WeakMap,eo=70,me=class{value;#e;#t;constructor(t){this.value=t,this.#e=Ue(t),this.#t=Date.now()}hotUpdate(t){Date.now()-this.#t<eo||Yt(t,this.#e)||(this.value=t,this.#e=Ue(t),this.#t=Date.now())}};function Vr(o,t){pe.has(o)||pe.set(o,new me(t));let e=pe.get(o);if(e.hotUpdate(t),le.has(e))return le.get(e);let n=[()=>e.value,s=>{Zt(s)&&(s=s(e.value)??e.value),e.value=s}];return Object.defineProperty(n,"value",{get(){return e.value},set(s){e.value=s}}),le.set(e,n),n}var Zr=He;export{Le as baseMiddleware,Ar as createDefineMock,Zr as default,Jr as defineMock,Vr as defineMockData,He as mockDevServerPlugin,Fe as mockWebSocket,_e as transformMockData};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vite-plugin-mock-dev-server",
3
- "version": "1.3.0",
3
+ "version": "1.3.1",
4
4
  "keywords": [
5
5
  "vite",
6
6
  "plugin",
@@ -44,11 +44,11 @@
44
44
  "cookies": "^0.8.0",
45
45
  "cors": "^2.8.5",
46
46
  "debug": "^4.3.4",
47
- "esbuild": "^0.18.15",
47
+ "esbuild": "^0.19.2",
48
48
  "fast-glob": "^3.3.1",
49
49
  "formidable": "2.1.1",
50
50
  "http-status": "^1.6.2",
51
- "is-core-module": "^2.12.1",
51
+ "is-core-module": "^2.13.0",
52
52
  "json5": "^2.2.3",
53
53
  "mime-types": "^2.1.35",
54
54
  "path-to-regexp": "^6.2.1",
@@ -56,8 +56,8 @@
56
56
  "ws": "^8.13.0"
57
57
  },
58
58
  "devDependencies": {
59
- "@pengzhanbo/eslint-config": "^0.4.0",
60
- "@pengzhanbo/prettier-config": "^0.4.0",
59
+ "@pengzhanbo/eslint-config": "^0.4.2",
60
+ "@pengzhanbo/prettier-config": "^0.4.2",
61
61
  "@types/co-body": "^6.1.0",
62
62
  "@types/cookies": "^0.7.7",
63
63
  "@types/cors": "^2.8.13",
@@ -67,15 +67,15 @@
67
67
  "@types/mime-types": "^2.1.1",
68
68
  "@types/node": "^20.4.3",
69
69
  "@types/ws": "^8.5.5",
70
- "bumpp": "^9.1.1",
70
+ "bumpp": "^9.2.0",
71
71
  "conventional-changelog-cli": "^3.0.0",
72
- "eslint": "^8.45.0",
72
+ "eslint": "^8.48.0",
73
73
  "mockjs": "^1.1.0",
74
- "prettier": "^3.0.0",
75
- "tsup": "^7.1.0",
76
- "typescript": "^5.1.6",
77
- "vite": "^4.4.6",
78
- "vitepress": "1.0.0-beta.6"
74
+ "prettier": "^3.0.2",
75
+ "tsup": "^7.2.0",
76
+ "typescript": "^5.2.2",
77
+ "vite": "^4.4.9",
78
+ "vitepress": "^1.0.0-rc.4"
79
79
  },
80
80
  "peerDependencies": {
81
81
  "vite": ">=3.0.0"