vite-plugin-mock-dev-server 1.1.11 → 1.1.12

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
@@ -38,7 +38,7 @@
38
38
  - ⚙️ Support Enabled/Disabled any one of the API mock.
39
39
  - 📀 Supports response body content type such as `text/json/buffer/stream`.
40
40
  - ⚖️ Use `server.proxy`
41
- - 🍕 Support `viteConfig.define` in the mock file.
41
+ - 🍕 Support `viteConfig.define` and `env` in the mock file.
42
42
  - ⚓️ Support `viteConfig.resolve.alias` in the mock file.
43
43
  - 🌈 Support `vite preview` mode.
44
44
  - 📤 Support `multipart` content-type, mock upload file.
@@ -57,7 +57,7 @@ See the [documentation](https://vite-plugin-mock-dev-server.netlify.app/) to lea
57
57
 
58
58
  ### Install
59
59
 
60
- ```sh
60
+ ``` sh
61
61
  # npm
62
62
  npm i -D vite-plugin-mock-dev-server
63
63
  # yarn
@@ -69,7 +69,7 @@ pnpm add -D vite-plugin-mock-dev-server
69
69
  ### Configuration
70
70
 
71
71
  `vite.config.ts`
72
- ```ts
72
+ ``` ts
73
73
  import { defineConfig } from 'vite'
74
74
  import mockDevServerPlugin from 'vite-plugin-mock-dev-server'
75
75
 
@@ -101,7 +101,7 @@ The plugin will also read the `define` configuration, which supports direct use
101
101
  By default, write mock data in the `mock` directory of your project's root directory:
102
102
 
103
103
  `mock/api.mock.ts` :
104
- ```ts
104
+ ``` ts
105
105
  import { defineMock } from 'vite-plugin-mock-dev-server'
106
106
 
107
107
  export default defineMock({
@@ -121,7 +121,7 @@ Vite plugin
121
121
 
122
122
 
123
123
  `vite.config.ts`
124
- ```ts
124
+ ``` ts
125
125
  import { defineConfig } from 'vite'
126
126
  import mockDevServerPlugin from 'vite-plugin-mock-dev-server'
127
127
 
@@ -189,7 +189,7 @@ export default defineConfig({
189
189
  **Default:** `{}`
190
190
 
191
191
  example: Configure to file upload dir
192
- ```ts
192
+ ``` ts
193
193
  MockDevServerPlugin({
194
194
  formidableOptions: {
195
195
  uploadDir: path.join(process.cwd(), 'uploads'),
@@ -211,7 +211,7 @@ export default defineConfig({
211
211
 
212
212
  **Default:** `false`
213
213
 
214
- ```ts
214
+ ``` ts
215
215
  interface ServerBuildOptions {
216
216
  /**
217
217
  * server port
@@ -230,7 +230,7 @@ export default defineConfig({
230
230
 
231
231
  Mock Type Helper
232
232
 
233
- ```ts
233
+ ``` ts
234
234
  import { defineMock } from 'vite-plugin-mock-dev-server'
235
235
 
236
236
  export default defineMock({
@@ -243,7 +243,7 @@ export default defineMock({
243
243
 
244
244
  Return a custom defineMock function to support preprocessing of mock config.
245
245
 
246
- ```ts
246
+ ``` ts
247
247
  import path from 'node:path'
248
248
  import { createDefineMock } from 'vite-plugin-mock-dev-server'
249
249
 
@@ -259,7 +259,7 @@ export default defineApiMock({
259
259
 
260
260
  ## Mock Configuration
261
261
 
262
- ```ts
262
+ ``` ts
263
263
  // Configure the http mock
264
264
  export default defineMock({
265
265
  /**
@@ -384,7 +384,7 @@ export default defineMock({
384
384
  }
385
385
  })
386
386
  ```
387
- ```ts
387
+ ``` ts
388
388
  // Configure the WebSocket mock
389
389
  export default defineMock({
390
390
  /**
@@ -442,7 +442,7 @@ type Request = Connect.IncomingMessage & {
442
442
 
443
443
  The original type of `response` is `http.ServerResponse<http.IncomingMessage>`. The plugin adds `setCookie(name, value)` method for configuration cookies on this basis.
444
444
 
445
- ```ts
445
+ ``` ts
446
446
  type Response = http.ServerResponse<http.IncomingMessage> & {
447
447
  setCookie: (
448
448
  name: string,
@@ -466,14 +466,14 @@ type Response = http.ServerResponse<http.IncomingMessage> & {
466
466
  See more examples: [example](/example/)
467
467
 
468
468
  **exp:** Match `/api/test`, And returns a response body content with empty data
469
- ```ts
469
+ ``` ts
470
470
  export default defineMock({
471
471
  url: '/api/test',
472
472
  })
473
473
  ```
474
474
 
475
475
  **exp:** Match `/api/test` , And returns a static content data
476
- ```ts
476
+ ``` ts
477
477
  export default defineMock({
478
478
  url: '/api/test',
479
479
  body: { a: 1 },
@@ -482,7 +482,7 @@ export default defineMock({
482
482
 
483
483
 
484
484
  **exp:** Only Support `GET` Method
485
- ```ts
485
+ ``` ts
486
486
  export default defineMock({
487
487
  url: '/api/test',
488
488
  method: 'GET'
@@ -490,14 +490,14 @@ export default defineMock({
490
490
  ```
491
491
 
492
492
  **exp:** In the response header, add a custom header and cookie
493
- ```ts
493
+ ``` ts
494
494
  export default defineMock({
495
495
  url: '/api/test',
496
496
  headers: { 'X-Custom': '12345678' },
497
497
  cookies: { 'my-cookie': '123456789' },
498
498
  })
499
499
  ```
500
- ```ts
500
+ ``` ts
501
501
  export default defineMock({
502
502
  url: '/api/test',
503
503
  headers({ query, body, params, headers }) {
@@ -511,7 +511,7 @@ export default defineMock({
511
511
 
512
512
 
513
513
  **exp:** Define multiple mock requests for the same URL and match valid rules with validators
514
- ```ts
514
+ ``` ts
515
515
  export default defineMock([
516
516
  // Match /api/test?a=1
517
517
  {
@@ -539,7 +539,7 @@ export default defineMock([
539
539
 
540
540
 
541
541
  **exp:** Response Delay
542
- ```ts
542
+ ``` ts
543
543
  export default defineMock({
544
544
  url: '/api/test',
545
545
  delay: 6000, // delay 6 seconds
@@ -548,7 +548,7 @@ export default defineMock({
548
548
 
549
549
 
550
550
  **exp:** The interface request failed
551
- ```ts
551
+ ``` ts
552
552
  export default defineMock({
553
553
  url: '/api/test',
554
554
  status: 502,
@@ -558,7 +558,7 @@ export default defineMock({
558
558
 
559
559
 
560
560
  **exp:** Dynamic route matching
561
- ```ts
561
+ ``` ts
562
562
  export default defineMock({
563
563
  url: '/api/user/:userId',
564
564
  body({ params }) {
@@ -581,7 +581,7 @@ export default defineMock({
581
581
  body: Buffer.from(JSON.stringify({ a: 1 }))
582
582
  })
583
583
  ```
584
- ```ts
584
+ ``` ts
585
585
  // When the type is buffer, the content-type is application/octet-stream.
586
586
  // The data passed in through body will be converted to a buffer.
587
587
  export default defineMock({
@@ -595,7 +595,7 @@ export default defineMock({
595
595
  **exp:** Response file type
596
596
 
597
597
  Simulate file download, and pass in the file reading stream.
598
- ```ts
598
+ ``` ts
599
599
  import { createReadStream } from 'node:fs'
600
600
 
601
601
  export default defineMock({
@@ -610,7 +610,7 @@ export default defineMock({
610
610
  ```
611
611
 
612
612
  **exp:** Use `mockjs`:
613
- ```ts
613
+ ``` ts
614
614
  import Mock from 'mockjs'
615
615
 
616
616
  export default defineMock({
@@ -626,7 +626,7 @@ You need install `mockjs`
626
626
 
627
627
 
628
628
  **exp:** Use `response` to customize the response
629
- ```ts
629
+ ``` ts
630
630
  export default defineMock({
631
631
  url: '/api/test',
632
632
  response(req, res, next) {
@@ -646,7 +646,7 @@ export default defineMock({
646
646
 
647
647
 
648
648
  **exp:** Use json / json5
649
- ```json
649
+ ``` json
650
650
  {
651
651
  "url": "/api/test",
652
652
  "body": {
@@ -692,7 +692,7 @@ export default defineMock({
692
692
  ```
693
693
 
694
694
  **exp:** Graphql
695
- ```ts
695
+ ``` ts
696
696
  import { buildSchema, graphql } from 'graphql'
697
697
 
698
698
  const schema = buildSchema(`
@@ -713,7 +713,7 @@ export default defineMock({
713
713
  })
714
714
  ```
715
715
 
716
- ```ts
716
+ ``` ts
717
717
  fetch('/api/graphql', {
718
718
  method: 'POST',
719
719
  body: JSON.stringify({ source: '{ hello }' })
@@ -721,7 +721,7 @@ fetch('/api/graphql', {
721
721
  ```
722
722
 
723
723
  **exp:** WebSocket Mock
724
- ```ts
724
+ ``` ts
725
725
  // ws.mock.ts
726
726
  export default defineMock({
727
727
  url: '/socket.io',
@@ -748,7 +748,7 @@ export default defineMock({
748
748
  }
749
749
  })
750
750
  ```
751
- ```ts
751
+ ``` ts
752
752
  // app.ts
753
753
  const ws = new WebSocket('ws://localhost:5173/socket.io')
754
754
  ws.addEventListener('open', () => {
@@ -769,7 +769,7 @@ In some scenarios, it may be necessary to use the data provided by mock services
769
769
  To meet such scenarios, on one hand, the plugin provides support under `vite preview`, and on the other hand, it also builds a small independent mock service application that can be deployed to relevant environments during `vite build`. This can then be forwarded through other HTTP servers like Nginx to actual ports for mock support.
770
770
 
771
771
  The default output is built into the directory `dist/mockServer`, generating files as follows:
772
- ```sh
772
+ ``` sh
773
773
  ./mockServer
774
774
  ├── index.js
775
775
  ├── mock-data.js
package/README.zh-CN.md CHANGED
@@ -39,7 +39,7 @@
39
39
  - ⚙️ 随意开启或关闭对某个接口的 mock配置
40
40
  - 📀 支持多种响应体数据类型,包括 `text/json/buffer/stream`.
41
41
  - ⚖️ 使用 `server.proxy` 配置
42
- - 🍕 支持在 mock文件中使用 `viteConfig.define`配置字段
42
+ - 🍕 支持在 mock文件中使用 `viteConfig.define`配置字段 和 `env` 环境变量
43
43
  - ⚓️ 支持在 mock文件中使用 `viteConfig.resolve.alias` 路径别名
44
44
  - 🌈 支持 `vite preview` 模式
45
45
  - 📤 支持 multipart 类型,模拟文件上传
package/dist/index.cjs CHANGED
@@ -1,6 +1,6 @@
1
- "use strict";var nt=Object.create;var J=Object.defineProperty;var st=Object.getOwnPropertyDescriptor;var it=Object.getOwnPropertyNames;var ct=Object.getPrototypeOf,at=Object.prototype.hasOwnProperty;var pt=(e,o)=>{for(var t in o)J(e,t,{get:o[t],enumerable:!0})},Me=(e,o,t,r)=>{if(o&&typeof o=="object"||typeof o=="function")for(let n of it(o))!at.call(e,n)&&n!==t&&J(e,n,{get:()=>o[n],enumerable:!(r=st(o,n))||r.enumerable});return e};var f=(e,o,t)=>(t=e!=null?nt(ct(e)):{},Me(o||!e||!e.__esModule?J(t,"default",{value:e,enumerable:!0}):t,e)),ut=e=>Me(J({},"__esModule",{value:!0}),e);var Lt={};pt(Lt,{baseMiddleware:()=>ue,createDefineMock:()=>Et,default:()=>It,defineMock:()=>Dt,mockDevServerPlugin:()=>he,mockWebSocket:()=>ge,transformMockData:()=>le});module.exports=ut(Lt);var lt=()=>typeof document>"u"?new URL("file:"+__filename).href:document.currentScript&&document.currentScript.src||new URL("main.js",document.baseURI).href,b=lt();var Ie=f(require("fs"),1),q=f(require("fs/promises"),1),$=f(require("path"),1),Le=require("esbuild"),_e=f(require("fast-glob"),1),$e=f(require("is-core-module"),1),ee=require("vite");var xe="vite-plugin-mock-dev-server",we="1.1.11";var ne=f(require("fs/promises"),1),Se=f(require("path"),1),Oe=f(require("json5"),1),z={name:"externalize-deps",setup(e){e.onResolve({filter:/.*/},({path:o})=>{if(o[0]!=="."&&!Se.default.isAbsolute(o))return{external:!0}})}},G={name:"json5-loader",setup(e){e.onLoad({filter:/\.json5$/},async({path:o})=>{let t=await ne.default.readFile(o,"utf-8");return{contents:`export default ${JSON.stringify(Oe.default.parse(t))}`,loader:"js"}})}},Q={name:"json-loader",setup(e){e.onLoad({filter:/\.json$/},async({path:o})=>({contents:`export default ${await ne.default.readFile(o,"utf-8")}`,loader:"js"}))}},X=e=>({name:"alias-plugin",setup(o){o.onResolve({filter:/.*/},async({path:t})=>{let r=e.find(({find:c})=>mt(c,t));if(!r)return null;let{find:n,replacement:s}=r;return{path:(await o.resolve(t.replace(n,s),{kind:"import-statement",resolveDir:s,namespace:"file"})).path,external:!1}})}});function mt(e,o){return e instanceof RegExp?e.test(o):o.length<e.length?!1:o===e?!0:o.startsWith(`${e}/`)}var Y=f(require("fs"),1),K=f(require("path"),1),Ce=require("url"),Pe=f(require("debug"),1),je=require("path-to-regexp"),se=f(require("picocolors"),1),w=e=>Array.isArray(e),j=e=>typeof e=="function",dt=e=>Object.prototype.toString.call(e)==="[object Object]",Re=e=>dt(e)&&Object.keys(e).length===0,ft=e=>e!==null&&typeof e=="object"&&typeof e.pipe=="function",We=e=>ft(e)&&e.readable!==!1&&typeof e._read=="function"&&typeof e._readableState=="object";function De(e){return new Promise(o=>setTimeout(o,e))}function Ee(e){return K.default.dirname((0,Ce.fileURLToPath)(e))}var R=(0,Pe.default)("vite:plugin-mock-dev-server"),O=e=>w(e)?e:e==null?[]:[e],W={info(...e){console.info(se.default.cyan("mock-dev-server: "),...e)},error(...e){console.error(`
2
- `,se.default.cyan("mock-dev-server: "),...e,`
3
- `)}};function A(e,o,t){for(let n of o){let s=K.default.join(e,n);if(Y.default.existsSync(s)&&Y.default.statSync(s).isFile()){let i=t!=null&&t.pathOnly?s:Y.default.readFileSync(s,"utf-8");if(!(t!=null&&t.predicate)||t.predicate(i))return i}}let r=K.default.dirname(e);if(r!==e&&(!(t!=null&&t.rootDir)||r.startsWith(t==null?void 0:t.rootDir)))return A(r,o,t)}var V=(e={})=>{let o=[],t=[];return Object.keys(e).forEach(r=>{var s,i;let n=e[r];typeof n=="string"||!n.ws&&!((s=n.target)!=null&&s.toString().startsWith("ws:"))&&!((i=n.target)!=null&&i.toString().startsWith("wss:"))?o.push(r):t.push(r)}),{httpProxies:o,wsProxies:t}};function Z(e,o){return e[0]==="^"&&new RegExp(e).test(o)||o.startsWith(e)}function N(e,o){return((0,je.match)(e,{decode:decodeURIComponent})(o)||{params:{}}).params||{}}async function Fe(e,o,t){let r=O(t.include),n=O(t.exclude),s={};if(o.define)for(let p in o.define){let m=o.define[p];s[p]=typeof m=="string"?m:JSON.stringify(m)}let{httpProxies:i}=V(o.server.proxy||{});i.push(...O(t.prefix));let c=O(t.wsPrefix),l={};try{let p=A(o.root,["package.json"]);p&&(l=JSON.parse(p))}catch{}let d=t.build.dist,M=await ht(process.cwd(),r,n),v=$.default.join(o.root,`mock-data-${Date.now()}.js`);await q.default.writeFile(v,M,"utf-8");let{code:H,deps:E}=await vt(v,s,o.resolve.alias),a=kt(E);await q.default.unlink(v);let u=[{filename:$.default.join(d,"mock-data.js"),source:H},{filename:$.default.join(d,"index.js"),source:yt(i,c,t.cookiesOptions,t.build.serverPort)},{filename:$.default.join(d,"package.json"),source:gt(l,a)}];try{if($.default.isAbsolute(d)){await q.default.rm(d,{recursive:!0}),Ie.default.mkdirSync(d,{recursive:!0});for(let{filename:p,source:m}of u)await q.default.writeFile(p,m,"utf-8")}else for(let{filename:p,source:m}of u)e.emitFile({type:"asset",fileName:p,source:m})}catch{}}function kt(e){let o=new Set,t=[xe,"connect","cors"];return Object.keys(e).forEach(r=>{e[r].imports.filter(s=>s.external).map(s=>s.path).forEach(s=>{!t.includes(s)&&!(0,$e.default)(s)&&o.add(s)})}),Array.from(o)}function gt(e,o){let{dependencies:t={},devDependencies:r={}}=e,n={...t,...r},s={name:"mock-server",type:"module",scripts:{start:"node index.js"},dependencies:{connect:"^3.7.0","vite-plugin-mock-dev-server":`^${we}`,cors:"^2.8.5"},pnpm:{peerDependencyRules:{ignoreMissing:["vite"]}}};return o.forEach(i=>{s.dependencies[i]=n[i]||"latest"}),JSON.stringify(s,null,2)}function yt(e,o,t={},r=8080){return`import { createServer } from 'node:http';
1
+ "use strict";var st=Object.create;var J=Object.defineProperty;var it=Object.getOwnPropertyDescriptor;var ct=Object.getOwnPropertyNames;var at=Object.getPrototypeOf,pt=Object.prototype.hasOwnProperty;var lt=(e,o)=>{for(var t in o)J(e,t,{get:o[t],enumerable:!0})},xe=(e,o,t,r)=>{if(o&&typeof o=="object"||typeof o=="function")for(let n of ct(o))!pt.call(e,n)&&n!==t&&J(e,n,{get:()=>o[n],enumerable:!(r=it(o,n))||r.enumerable});return e};var f=(e,o,t)=>(t=e!=null?st(at(e)):{},xe(o||!e||!e.__esModule?J(t,"default",{value:e,enumerable:!0}):t,e)),ut=e=>xe(J({},"__esModule",{value:!0}),e);var $t={};lt($t,{baseMiddleware:()=>me,createDefineMock:()=>It,default:()=>Lt,defineMock:()=>Et,mockDevServerPlugin:()=>Me,mockWebSocket:()=>ve,transformMockData:()=>de});module.exports=ut($t);var mt=()=>typeof document>"u"?new URL("file:"+__filename).href:document.currentScript&&document.currentScript.src||new URL("main.js",document.baseURI).href,h=mt();var Ie=f(require("fs"),1),q=f(require("fs/promises"),1),$=f(require("path"),1),Le=require("esbuild"),$e=f(require("fast-glob"),1),Fe=f(require("is-core-module"),1),te=require("vite");var Se="vite-plugin-mock-dev-server",Oe="1.1.12";var dt=/import\.meta\.env\.(.+)/;function z(e){let o={},t=process.env.NODE_ENV||e.mode;Object.assign(o,{"process.env.NODE_ENV":JSON.stringify(t),"global.process.env.NODE_ENV":JSON.stringify(t),"globalThis.process.env.NODE_ENV":JSON.stringify(t),__vite_process_env_NODE_ENV:JSON.stringify(t)});let r={},n={};for(let c in e.define){let a=e.define[c];r[c]=typeof a=="string"?a:JSON.stringify(a);let m=c.match(dt);m&&(n[m[1]]=`__vite__define__${r[c]}`)}let s={},i={};s["import.meta.hot"]="undefined";for(let c in e.env)s[`import.meta.env.${c}`]=JSON.stringify(e.env[c]);return Object.assign(i,{"import.meta.env":JSON.stringify({...e.env,...n}).replace(/"__vite__define__(.+?)"([,}])/g,(c,a,m)=>`${a.replace(/(^\\")|(\\"$)/g,'"')}${m}`)}),{...s,...i,...o}}var se=f(require("fs/promises"),1),Pe=f(require("path"),1),Re=f(require("json5"),1),G={name:"externalize-deps",setup(e){e.onResolve({filter:/.*/},({path:o})=>{if(o[0]!=="."&&!Pe.default.isAbsolute(o))return{external:!0}})}},Q={name:"json5-loader",setup(e){e.onLoad({filter:/\.json5$/},async({path:o})=>{let t=await se.default.readFile(o,"utf-8");return{contents:`export default ${JSON.stringify(Re.default.parse(t))}`,loader:"js"}})}},V={name:"json-loader",setup(e){e.onLoad({filter:/\.json$/},async({path:o})=>({contents:`export default ${await se.default.readFile(o,"utf-8")}`,loader:"js"}))}},K=e=>({name:"alias-plugin",setup(o){o.onResolve({filter:/.*/},async({path:t})=>{let r=e.find(({find:c})=>ft(c,t));if(!r)return null;let{find:n,replacement:s}=r;return{path:(await o.resolve(t.replace(n,s),{kind:"import-statement",resolveDir:s,namespace:"file"})).path,external:!1}})}});function ft(e,o){return e instanceof RegExp?e.test(o):o.length<e.length?!1:o===e?!0:o.startsWith(`${e}/`)}var X=f(require("fs"),1),Y=f(require("path"),1),je=require("url"),Ce=f(require("debug"),1),We=require("path-to-regexp"),ie=f(require("picocolors"),1),S=e=>Array.isArray(e),j=e=>typeof e=="function",gt=e=>Object.prototype.toString.call(e)==="[object Object]",ce=e=>gt(e)&&Object.keys(e).length===0,kt=e=>e!==null&&typeof e=="object"&&typeof e.pipe=="function",De=e=>kt(e)&&e.readable!==!1&&typeof e._read=="function"&&typeof e._readableState=="object";function _e(e){return new Promise(o=>setTimeout(o,e))}function Ee(e){return Y.default.dirname((0,je.fileURLToPath)(e))}var C=(0,Ce.default)("vite:plugin-mock-dev-server"),w=e=>S(e)?e:e==null?[]:[e],W={info(...e){console.info(ie.default.cyan("mock-dev-server: "),...e)},error(...e){console.error(`
2
+ `,ie.default.cyan("mock-dev-server: "),...e,`
3
+ `)}};function U(e,o,t){for(let n of o){let s=Y.default.join(e,n);if(X.default.existsSync(s)&&X.default.statSync(s).isFile()){let i=t!=null&&t.pathOnly?s:X.default.readFileSync(s,"utf-8");if(!(t!=null&&t.predicate)||t.predicate(i))return i}}let r=Y.default.dirname(e);if(r!==e&&(!(t!=null&&t.rootDir)||r.startsWith(t==null?void 0:t.rootDir)))return U(r,o,t)}var Z=(e={})=>{let o=[],t=[];return Object.keys(e).forEach(r=>{var s,i;let n=e[r];typeof n=="string"||!n.ws&&!((s=n.target)!=null&&s.toString().startsWith("ws:"))&&!((i=n.target)!=null&&i.toString().startsWith("wss:"))?o.push(r):t.push(r)}),{httpProxies:o,wsProxies:t}};function ee(e,o){return e[0]==="^"&&new RegExp(e).test(o)||o.startsWith(e)}function A(e,o){return((0,We.match)(e,{decode:decodeURIComponent})(o)||{params:{}}).params||{}}async function Te(e,o,t){let r=w(t.include),n=w(t.exclude),s=z(o),{httpProxies:i}=Z(o.server.proxy||{});i.push(...w(t.prefix));let c=w(t.wsPrefix),a={};try{let u=U(o.root,["package.json"]);u&&(a=JSON.parse(u))}catch{}let m=t.build.dist,x=await Mt(process.cwd(),r,n),M=$.default.join(o.root,`mock-data-${Date.now()}.js`);await q.default.writeFile(M,x,"utf-8");let{code:N,deps:_}=await bt(M,s,o.resolve.alias),p=yt(_);await q.default.unlink(M);let l=[{filename:$.default.join(m,"mock-data.js"),source:N},{filename:$.default.join(m,"index.js"),source:ht(i,c,t.cookiesOptions,t.build.serverPort)},{filename:$.default.join(m,"package.json"),source:vt(a,p)}];try{if($.default.isAbsolute(m)){await q.default.rm(m,{recursive:!0}),Ie.default.mkdirSync(m,{recursive:!0});for(let{filename:u,source:d}of l)await q.default.writeFile(u,d,"utf-8")}else for(let{filename:u,source:d}of l)e.emitFile({type:"asset",fileName:u,source:d})}catch{}}function yt(e){let o=new Set,t=[Se,"connect","cors"];return Object.keys(e).forEach(r=>{e[r].imports.filter(s=>s.external).map(s=>s.path).forEach(s=>{!t.includes(s)&&!(0,Fe.default)(s)&&o.add(s)})}),Array.from(o)}function vt(e,o){let{dependencies:t={},devDependencies:r={}}=e,n={...t,...r},s={name:"mock-server",type:"module",scripts:{start:"node index.js"},dependencies:{connect:"^3.7.0","vite-plugin-mock-dev-server":`^${Oe}`,cors:"^2.8.5"},pnpm:{peerDependencyRules:{ignoreMissing:["vite"]}}};return o.forEach(i=>{s.dependencies[i]=n[i]||"latest"}),JSON.stringify(s,null,2)}function ht(e,o,t={},r=8080){return`import { createServer } from 'node:http';
4
4
  import connect from 'connect';
5
5
  import corsMiddleware from 'cors';
6
6
  import { baseMiddleware, mockWebSocket } from 'vite-plugin-mock-dev-server';
@@ -24,8 +24,8 @@ app.use(baseMiddleware({ mockData }, {
24
24
  server.listen(${r});
25
25
 
26
26
  console.log('listen: http://localhost:${r}');
27
- `}async function ht(e,o,t){let r=await(0,_e.default)(o,{cwd:e}),n=(0,ee.createFilter)(o,t,{resolve:!1}),s=r.filter(n),i="",c="";return s.forEach((l,d)=>{let M=(0,ee.normalizePath)($.default.join(e,l));i+=`import * as m${d} from '${M}';
28
- `,c+=`m${d}, `}),`import { transformMockData } from 'vite-plugin-mock-dev-server';
27
+ `}async function Mt(e,o,t){let r=await(0,$e.default)(o,{cwd:e}),n=(0,te.createFilter)(o,t,{resolve:!1}),s=r.filter(n),i="",c="";return s.forEach((a,m)=>{let x=(0,te.normalizePath)($.default.join(e,a));i+=`import * as m${m} from '${x}';
28
+ `,c+=`m${m}, `}),`import { transformMockData } from 'vite-plugin-mock-dev-server';
29
29
  ${i}
30
30
  const exporters = [${c}];
31
31
  const mockList = exporters.map((raw) => {
@@ -42,10 +42,10 @@ const mockList = exporters.map((raw) => {
42
42
  }
43
43
  return mockConfig
44
44
  });
45
- export default transformMockData(mockList);`}async function vt(e,o,t){var r;try{let n=await(0,Le.build)({entryPoints:[e],outfile:"out.js",write:!1,target:["node14.18","node16"],platform:"node",bundle:!0,metafile:!0,format:"esm",define:o,plugins:[X(t),z,G,Q]});return{code:n.outputFiles[0].text,deps:((r=n.metafile)==null?void 0:r.inputs)||{}}}catch(n){console.error(n)}return{code:"",deps:{}}}var ce=require("buffer"),ae=require("url"),Ne=f(require("cookies"),1),qe=f(require("http-status"),1),Be=f(require("lodash.sortby"),1),B=f(require("mime-types"),1),pe=require("path-to-regexp"),C=f(require("picocolors"),1);var te=f(require("co-body"),1),Te=f(require("formidable"),1);async function He(e,o){var n;let t=e.method.toUpperCase();if(["GET","DELETE","HEAD"].includes(t))return;let r=((n=e.headers["content-type"])==null?void 0:n.toLocaleLowerCase())||"";try{if(r.startsWith("application/json"))return await te.default.json(e);if(r.startsWith("application/x-www-form-urlencoded"))return await te.default.form(e);if(r.startsWith("text/plain"))return await te.default.text(e);if(r.startsWith("multipart/form-data"))return await Mt(e,o)}catch(s){console.error(s)}}async function Mt(e,o){let t=(0,Te.default)(o);return new Promise((r,n)=>{t.parse(e,(s,i,c)=>{if(s){n(s);return}r({...i,...c})})})}function Ue(e,o){return F(e.headers,o.headers)&&F(e.body,o.body)&&F(e.params,o.params)&&F(e.query,o.query)&&F(e.refererQuery,o.refererQuery)}function F(e,o){if(!o)return!0;for(let t in o)if(o[t]!==e[t])return!1;return!0}var bt=/:/g;function ue(e,{formidableOptions:o={},proxies:t,cookiesOptions:r}){return async function(n,s,i){let c=Date.now(),{query:l,pathname:d}=(0,ae.parse)(n.url,!0);if(!d||t.length===0||!t.some(h=>Z(h,n.url)))return i();let M=e.mockData,v=(0,Be.default)(Object.keys(M),h=>{var U;return((U=h.match(bt))==null?void 0:U.length)||0}).find(h=>(0,pe.pathToRegexp)(h).test(d));if(!v)return i();let{query:H}=(0,ae.parse)(n.headers.referer||"",!0),E=await He(n,o),a=new Ne.default(n,s,r),u=a.get.bind(a),p=n.method.toUpperCase(),m=xt(M[v],{pathname:d,method:p,request:{query:l,refererQuery:H,body:E,headers:n.headers,getCookie:u}});if(!m)return i();R("middleware: ",p,n.url);let k=n,g=s;k.body=E,k.query=l,k.refererQuery=H,k.params=N(m.url,d),k.getCookie=u,g.setCookie=a.set.bind(a);let{body:y,delay:S,type:P="json",response:I,status:L=200,statusText:_}=m;if(ie(g,L,_),await wt(k,g,m),await St(k,g,m),y){try{let h=j(y)?await y(k):y;await Ae(c,S),Ot(g,h,P)}catch(h){W.error(`${C.default.red("[body error]")} ${n.url}
46
- `,`file: ${C.default.cyan(m.__filepath__)}`,h),ie(g,500),s.end("")}return}if(I){try{await Ae(c,S),await I(k,g,i)}catch(h){W.error(`${C.default.red("[response error]")} ${n.url}
47
- `,`file: ${C.default.cyan(m.__filepath__)}`,h),ie(g,500),s.end("")}return}s.end("")}}function xt(e,{pathname:o,method:t,request:r}){return e.find(n=>{if(!o||!n||!n.url||n.ws===!0||!(n.method?w(n.method)?n.method:[n.method]:["GET","POST"]).includes(t))return!1;let i=(0,pe.pathToRegexp)(n.url).test(o);if(i&&n.validator){let c=N(n.url,o);if(j(n.validator))return n.validator({params:c,...r});try{return Ue({params:c,...r},n.validator)}catch(l){return W.error(`${C.default.red("[validator error]")} ${o}
48
- `,`file: ${C.default.cyan(n.__filepath__)}`,l),!1}}return i})}function ie(e,o=200,t){e.statusCode=o,e.statusMessage=t||Ct(o)}async function wt(e,o,{headers:t,type:r="json"}){let n=B.contentType(r)||B.contentType(B.lookup(r)||"");if(n&&o.setHeader("Content-Type",n),o.setHeader("Cache-Control","no-cache,max-age=0"),o.setHeader("X-Mock","generate by vite:plugin-mock-dev-server"),!!t)try{let s=j(t)?await t(e):t;Object.keys(s).forEach(i=>{o.setHeader(i,s[i])})}catch(s){W.error(`${C.default.red("[headers error]")} ${e.url}
49
- `,s)}}async function St(e,o,{cookies:t}){if(t)try{let r=j(t)?await t(e):t;Object.keys(r).forEach(n=>{let s=r[n];if(w(s)){let[i,c]=s;o.setCookie(n,i,c)}else o.setCookie(n,s)})}catch(r){W.error(`${C.default.red("[cookies error]")} ${e.url}
50
- `,r)}}function Ot(e,o,t){if(We(o))o.pipe(e);else if(ce.Buffer.isBuffer(o))e.end(t==="text"||t==="json"?o.toString("utf-8"):o);else{let r=typeof o=="string"?o:JSON.stringify(o);e.end(t==="buffer"?ce.Buffer.from(r):r)}}async function Ae(e,o){if(!o||o<=0)return;let t=Date.now()-e,r=o-t;r>0&&await De(r)}function Ct(e){return qe.default[e]||"Unknown"}var Ge=f(require("events"),1),oe=f(require("fs"),1),Qe=require("module"),me=f(require("path"),1),Xe=require("url"),de=f(require("chokidar"),1),Ye=require("esbuild"),Ke=f(require("fast-glob"),1),D=require("vite");var Je=require("url"),ze=f(require("lodash.sortby"),1);function le(e){let o=[];for(let[,r]of e.entries())r&&(w(r)?o.push(...r):o.push(r));let t={};return o.filter(r=>(r.enabled||typeof r.enabled>"u")&&r.url).forEach(r=>{let{pathname:n,query:s}=(0,Je.parse)(r.url,!0),i=t[n]??(t[n]=[]),c={...r,url:n};if(c.ws!==!0){let l=c.validator;Re(s)||(j(l)?c.validator=function(d){return F(d.query,s)&&l(d)}:l?(c.validator={...l},c.validator.query=c.validator.query?{...s,...c.validator.query}:s):c.validator={query:s})}i.push(c)}),Object.keys(t).forEach(r=>{t[r]=(0,ze.default)(t[r],n=>{if(n.ws===!0)return 0;let{validator:s}=n;return s?j(s)?0:1/Object.keys(s).reduce((c,l)=>c+Pt(s[l]),0):2})}),t}function Pt(e){return e?Object.keys(e).length:0}var jt=Ee(b),T=(0,Qe.createRequire)(jt),re=class extends Ge.default{constructor(t){super();this.options=t;this.moduleCache=new Map;this.moduleDeps=new Map;this.moduleType="cjs";this._mockData={};this.cwd=t.cwd||process.cwd();try{let r=A(this.cwd,["package.json"]);this.moduleType=r&&JSON.parse(r).type==="module"?"esm":"cjs"}catch{}}get mockData(){return this._mockData}load(){let{include:t,exclude:r}=this.options,n=(0,D.createFilter)(t,r,{resolve:!1});(0,Ke.default)(t,{cwd:this.cwd}).then(i=>Promise.all(i.filter(n).map(c=>this.loadMock(c)))).then(()=>this.updateMockList()),this.watchMockEntry(),this.watchDeps();let s=null;this.on("mock:update",async i=>{n(i)&&(await this.loadMock(i),s&&clearImmediate(s),s=setImmediate(()=>{this.updateMockList(),this.emit("mock:update-end",i),s=null}))}),this.on("mock:unlink",async i=>{n(i)&&(this.moduleCache.delete(i),this.updateMockList(),this.emit("mock:update-end",i))})}watchMockEntry(){let{include:t}=this.options,[r,...n]=t,s=de.default.watch(r,{ignoreInitial:!0,cwd:this.cwd});n.length>0&&n.forEach(i=>s.add(i)),s.on("add",async i=>{i=(0,D.normalizePath)(i),this.emit("mock:update",i),R("watcher:add",i)}),s.on("change",async i=>{i=(0,D.normalizePath)(i),this.emit("mock:update",i),R("watcher:change",i)}),s.on("unlink",async i=>{i=(0,D.normalizePath)(i),this.emit("mock:unlink",i),R("watcher:unlink",i)}),this.mockWatcher=s}watchDeps(){let t=[];this.depsWatcher=de.default.watch([],{ignoreInitial:!0,cwd:this.cwd}),this.depsWatcher.on("change",r=>{r=(0,D.normalizePath)(r);let n=this.moduleDeps.get(r);n&&n.forEach(s=>{this.emit("mock:update",s)})}),this.depsWatcher.on("unlink",r=>{r=(0,D.normalizePath)(r),this.moduleDeps.delete(r)}),this.on("update:deps",()=>{let r=[];for(let[s]of this.moduleDeps.entries())r.push(s);let n=r.filter(s=>!t.includes(s));n.length>0&&this.depsWatcher.add(n)})}close(){var t,r;(t=this.mockWatcher)==null||t.close(),(r=this.depsWatcher)==null||r.close()}updateMockList(){this._mockData=le(this.moduleCache)}updateModuleDeps(t,r){Object.keys(r).forEach(n=>{r[n].imports.map(i=>i.path).forEach(i=>{this.moduleDeps.has(i)||this.moduleDeps.set(i,new Set),this.moduleDeps.get(i).add(t)})}),this.emit("update:deps")}async loadMock(t){if(!t)return;let r=!1;/\.m[jt]s$/.test(t)?r=!0:/\.c[jt]s$/.test(t)?r=!1:r=this.moduleType==="esm";let{code:n,deps:s}=await this.transformWithEsbuild(t,r);try{let i=await this.loadFromCode(t,n,r)||{},c;i.default?c=i.default:(c=[],Object.keys(i).forEach(l=>{w(i[l])?c.push(...i[l]):c.push(i[l])})),w(c)?c.forEach(l=>l.__filepath__=t):c.__filepath__=t,this.moduleCache.set(t,c),this.updateModuleDeps(t,s)}catch(i){console.error(i)}}async loadFromCode(t,r,n){if(n){let s=`${t}.timestamp-${Date.now()}`,i=`${s}.mjs`,c=`${(0,Xe.pathToFileURL)(s)}.mjs`;await oe.default.promises.writeFile(i,r,"utf8");try{return await import(c)}finally{try{oe.default.unlinkSync(i)}catch{}}}else{t=me.default.resolve(this.cwd,t);let s=me.default.extname(t),i=oe.default.realpathSync(t),c=s in T.extensions?s:".js",l=T.extensions[c];T.extensions[c]=(M,v)=>{v===i?M._compile(r,v):l(M,v)},delete T.cache[T.resolve(t)];let d=T(t);return T.extensions[c]=l,d.__esModule?d:{default:d}}}async transformWithEsbuild(t,r){var n;try{let s=await(0,Ye.build)({entryPoints:[t],outfile:"out.js",write:!1,target:["node14.18","node16"],platform:"node",bundle:!0,metafile:!0,format:r?"esm":"cjs",define:this.options.define,plugins:[X(this.options.alias),z,Q,G]});return{code:s.outputFiles[0].text,deps:((n=s.metafile)==null?void 0:n.inputs)||{}}}catch(s){console.error(s)}return{code:"",deps:{}}}};var fe=require("url"),Ze=f(require("cookies"),1),ke=require("path-to-regexp"),et=f(require("picocolors"),1),tt=require("ws");function ge(e,o,t,r){var E;let n=new Map,s=new Map,i=new WeakMap,c=a=>{let u=s.get(a);return!u&&s.set(a,u=new Map),u},l=(a,u)=>{let p=a.get(u);return!p&&a.set(u,p=new tt.WebSocketServer({noServer:!0})),p},d=(a,u)=>{let p=n.get(a);!p&&n.set(a,p=new Set),p.add(u)},M=(a,u,p,m,k,g)=>{var y;try{(y=p.setup)==null||y.call(p,u,m),u.on("close",()=>{a.delete(k)})}catch(S){W.error(`${et.default.red("[websocket server error]")} ${g}
51
- `,S)}},v=(a,u,p,m)=>{a.emit("connection",u,p),u.on("close",()=>{let k=m.findIndex(g=>g.ws===u);k!==-1&&m.splice(k,1)})},H=(a,u,p,m,k)=>{let{cleanupList:g,connectionList:y,context:S}=i.get(u);Ve(g),y.forEach(({ws:P})=>P.removeAllListeners()),u.removeAllListeners(),M(a,u,p,S,m,k),y.forEach(({ws:P,req:I})=>v(u,P,I,y))};(E=e.on)==null||E.call(e,"mock:update-end",a=>{if(!n.has(a))return;let u=n.get(a);if(u)for(let p of u.values())for(let m of e.mockData[p]){if(!m.ws||m.__filepath__!==a)return;let k=c(p);for(let[g,y]of k.entries())H(k,y,m,g,a)}}),o==null||o.on("upgrade",(a,u,p)=>{let{pathname:m,query:k}=(0,fe.parse)(a.url,!0);if(!m||t.length===0||!t.some(x=>Z(x,a.url)))return;let g=e.mockData,y=Object.keys(g).find(x=>(0,ke.pathToRegexp)(x).test(m));if(!y)return;let S=g[y].find(x=>x.url&&x.ws&&(0,ke.pathToRegexp)(x.url).test(m));if(!S)return;let P=S.__filepath__;d(P,y);let I=c(y),L=l(I,m),_=i.get(L);if(!_){let x=[],ve={onCleanup:rt=>x.push(rt)};_={cleanupList:x,context:ve,connectionList:[]},i.set(L,_),M(I,L,S,ve,m,P)}let h=a,U=new Ze.default(a,a,r),{query:ot}=(0,fe.parse)(a.headers.referer||"",!0);h.query=k,h.refererQuery=ot,h.params=N(y,m),h.getCookie=U.get.bind(U),L.handleUpgrade(h,u,p,x=>{R(`websocket-mock: ${a.url} connected`),_.connectionList.push({req:h,ws:x}),v(L,x,h,_.connectionList)})}),o==null||o.on("close",()=>{for(let a of s.values()){for(let u of a.values()){let p=i.get(u);Ve(p.cleanupList),u.close()}a.clear()}s.clear(),n.clear()})}function Ve(e){let o;for(;o=e.shift();)o==null||o()}async function ye(e,o,t,r){let n=O(o.include),s=O(o.exclude),i={};if(e.define)for(let M in e.define){let v=e.define[M];i[M]=typeof v=="string"?v:JSON.stringify(v)}let c=new re({include:n,exclude:s,define:i,alias:e.resolve.alias});c.load(),c.on("mock:update-end",()=>{o.reload&&(r==null||r.send({type:"full-reload"}))}),t==null||t.on("close",()=>c.close());let{httpProxies:l}=V(e.server.proxy||{}),d=O(o.prefix);return ge(c,t,O(o.wsPrefix),o.cookiesOptions),ue(c,{formidableOptions:o.formidableOptions,proxies:[...d,...l],cookiesOptions:o.cookiesOptions})}function he({prefix:e=[],wsPrefix:o=[],include:t=["mock/**/*.mock.{js,ts,cjs,mjs,json,json5}"],exclude:r=["**/node_modules/**","**/.vscode/**","**/.git/**"],reload:n=!1,formidableOptions:s={},build:i=!1,cookiesOptions:c={}}={}){let l={prefix:e,wsPrefix:o,include:t,exclude:r,reload:n,cookiesOptions:c,formidableOptions:{multiples:!0,...s},build:i?Object.assign({serverPort:8080,dist:"mockServer"},typeof i=="object"?i:{}):!1},d=[Wt(l)];return l.build&&d.push(Rt(l)),d}function Rt(e){let o={};return{name:"vite-plugin-mock-dev-server-generator",enforce:"post",apply:"build",configResolved(t){o=t,t.logger.warn("")},async buildEnd(t){t||o.command==="build"&&await Fe(this,o,e)}}}function Wt(e){let o={};return{name:"vite-plugin-mock-dev-server",enforce:"pre",apply:"serve",configResolved(t){o=t,t.logger.warn("")},async configureServer({middlewares:t,config:r,httpServer:n,ws:s}){let i=await ye(r,e,n,s);t.use(i)},async configurePreviewServer({middlewares:t,httpServer:r}){let n=await ye(o,e,r);t.use(n)}}}function Dt(e){return e}function Et(e){return t=>(w(t)?t=t.map(r=>e(r)||r):t=e(t)||t,t)}var It=he;0&&(module.exports={baseMiddleware,createDefineMock,defineMock,mockDevServerPlugin,mockWebSocket,transformMockData});
45
+ export default transformMockData(mockList);`}async function bt(e,o,t){var r;try{let n=await(0,Le.build)({entryPoints:[e],outfile:"out.js",write:!1,target:["node14.18","node16"],platform:"node",bundle:!0,metafile:!0,format:"esm",define:o,plugins:[K(t),G,Q,V]});return{code:n.outputFiles[0].text,deps:((r=n.metafile)==null?void 0:r.inputs)||{}}}catch(n){console.error(n)}return{code:"",deps:{}}}var pe=require("buffer"),le=require("url"),qe=f(require("cookies"),1),Be=f(require("http-status"),1),Je=f(require("lodash.sortby"),1),B=f(require("mime-types"),1),ue=require("path-to-regexp"),P=f(require("picocolors"),1);var oe=f(require("co-body"),1),Ne=f(require("formidable"),1);async function He(e,o){var n;let t=e.method.toUpperCase();if(["GET","DELETE","HEAD"].includes(t))return;let r=((n=e.headers["content-type"])==null?void 0:n.toLocaleLowerCase())||"";try{if(r.startsWith("application/json"))return await oe.default.json(e);if(r.startsWith("application/x-www-form-urlencoded"))return await oe.default.form(e);if(r.startsWith("text/plain"))return await oe.default.text(e);if(r.startsWith("multipart/form-data"))return await xt(e,o)}catch(s){console.error(s)}}async function xt(e,o){let t=(0,Ne.default)(o);return new Promise((r,n)=>{t.parse(e,(s,i,c)=>{if(s){n(s);return}r({...i,...c})})})}function Ue(e,o){return F(e.headers,o.headers)&&F(e.body,o.body)&&F(e.params,o.params)&&F(e.query,o.query)&&F(e.refererQuery,o.refererQuery)}function F(e,o){if(!o)return!0;for(let t in o)if(o[t]!==e[t])return!1;return!0}var wt=/:/g;function me(e,{formidableOptions:o={},proxies:t,cookiesOptions:r}){return async function(n,s,i){let c=Date.now(),{query:a,pathname:m}=(0,le.parse)(n.url,!0);if(!m||t.length===0||!t.some(v=>ee(v,n.url)))return i();let x=e.mockData,M=(0,Je.default)(Object.keys(x),v=>{var H;return((H=v.match(wt))==null?void 0:H.length)||0}).find(v=>(0,ue.pathToRegexp)(v).test(m));if(!M)return i();let{query:N}=(0,le.parse)(n.headers.referer||"",!0),_=await He(n,o),p=new qe.default(n,s,r),l=p.get.bind(p),u=n.method.toUpperCase(),d=St(x[M],{pathname:m,method:u,request:{query:a,refererQuery:N,body:_,headers:n.headers,getCookie:l}});if(!d)return i();C("middleware: ",u,n.url);let g=n,k=s;g.body=_,g.query=a,g.refererQuery=N,g.params=A(d.url,m),g.getCookie=l,k.setCookie=p.set.bind(p);let{body:y,delay:O,type:R="json",response:E,status:I=200,statusText:L}=d;if(ae(k,I,L),await Ot(g,k,d),await Pt(g,k,d),y){try{let v=j(y)?await y(g):y;await Ae(c,O),Rt(k,v,R)}catch(v){W.error(`${P.default.red("[body error]")} ${n.url}
46
+ `,`file: ${P.default.cyan(d.__filepath__)}`,v),ae(k,500),s.end("")}return}if(E){try{await Ae(c,O),await E(g,k,i)}catch(v){W.error(`${P.default.red("[response error]")} ${n.url}
47
+ `,`file: ${P.default.cyan(d.__filepath__)}`,v),ae(k,500),s.end("")}return}s.end("")}}function St(e,{pathname:o,method:t,request:r}){return e.find(n=>{if(!o||!n||!n.url||n.ws===!0||!(n.method?S(n.method)?n.method:[n.method]:["GET","POST"]).includes(t))return!1;let i=(0,ue.pathToRegexp)(n.url).test(o);if(i&&n.validator){let c=A(n.url,o);if(j(n.validator))return n.validator({params:c,...r});try{return Ue({params:c,...r},n.validator)}catch(a){return W.error(`${P.default.red("[validator error]")} ${o}
48
+ `,`file: ${P.default.cyan(n.__filepath__)}`,a),!1}}return i})}function ae(e,o=200,t){e.statusCode=o,e.statusMessage=t||jt(o)}async function Ot(e,o,t){let{headers:r,type:n="json"}=t,s=t.__filepath__,i=B.contentType(n)||B.contentType(B.lookup(n)||"");if(i&&o.setHeader("Content-Type",i),o.setHeader("Cache-Control","no-cache,max-age=0"),o.setHeader("X-Mock-Power-By","vite-plugin-mock-dev-server"),o.setHeader("X-File-Path",s),!!r)try{let c=j(r)?await r(e):r;Object.keys(c).forEach(a=>{o.setHeader(a,c[a])})}catch(c){W.error(`${P.default.red("[headers error]")} ${e.url}
49
+ `,c)}}async function Pt(e,o,{cookies:t}){if(t)try{let r=j(t)?await t(e):t;Object.keys(r).forEach(n=>{let s=r[n];if(S(s)){let[i,c]=s;o.setCookie(n,i,c)}else o.setCookie(n,s)})}catch(r){W.error(`${P.default.red("[cookies error]")} ${e.url}
50
+ `,r)}}function Rt(e,o,t){if(De(o))o.pipe(e);else if(pe.Buffer.isBuffer(o))e.end(t==="text"||t==="json"?o.toString("utf-8"):o);else{let r=typeof o=="string"?o:JSON.stringify(o);e.end(t==="buffer"?pe.Buffer.from(r):r)}}async function Ae(e,o){if(!o||o<=0)return;let t=Date.now()-e,r=o-t;r>0&&await _e(r)}function jt(e){return Be.default[e]||"Unknown"}var Qe=f(require("events"),1),re=f(require("fs"),1),Ve=require("module"),fe=f(require("path"),1),Ke=require("url"),ge=f(require("chokidar"),1),Xe=require("esbuild"),Ye=f(require("fast-glob"),1),D=require("vite");var ze=require("url"),Ge=f(require("lodash.sortby"),1);function de(e){let o=[];for(let[,r]of e.entries())r&&(S(r)?o.push(...r):o.push(r));let t={};return o.filter(r=>(r.enabled||typeof r.enabled>"u")&&r.url).forEach(r=>{let{pathname:n,query:s}=(0,ze.parse)(r.url,!0),i=t[n]??(t[n]=[]),c={...r,url:n};if(c.ws!==!0){let a=c.validator;ce(s)||(j(a)?c.validator=function(m){return F(m.query,s)&&a(m)}:a?(c.validator={...a},c.validator.query=c.validator.query?{...s,...c.validator.query}:s):c.validator={query:s})}i.push(c)}),Object.keys(t).forEach(r=>{t[r]=(0,Ge.default)(t[r],n=>{if(n.ws===!0)return 0;let{validator:s}=n;return!s||ce(s)?2:j(s)?0:1/Object.keys(s).reduce((c,a)=>c+Ct(s[a]),0)})}),t}function Ct(e){return e?Object.keys(e).length:0}var Wt=Ee(h),T=(0,Ve.createRequire)(Wt),ne=class extends Qe.default{constructor(t){super();this.options=t;this.moduleCache=new Map;this.moduleDeps=new Map;this.moduleType="cjs";this._mockData={};this.cwd=t.cwd||process.cwd();try{let r=U(this.cwd,["package.json"]);this.moduleType=r&&JSON.parse(r).type==="module"?"esm":"cjs"}catch{}}get mockData(){return this._mockData}load(){let{include:t,exclude:r}=this.options,n=(0,D.createFilter)(t,r,{resolve:!1});(0,Ye.default)(t,{cwd:this.cwd}).then(i=>Promise.all(i.filter(n).map(c=>this.loadMock(c)))).then(()=>this.updateMockList()),this.watchMockEntry(),this.watchDeps();let s=null;this.on("mock:update",async i=>{n(i)&&(await this.loadMock(i),s&&clearImmediate(s),s=setImmediate(()=>{this.updateMockList(),this.emit("mock:update-end",i),s=null}))}),this.on("mock:unlink",async i=>{n(i)&&(this.moduleCache.delete(i),this.updateMockList(),this.emit("mock:update-end",i))})}watchMockEntry(){let{include:t}=this.options,[r,...n]=t,s=ge.default.watch(r,{ignoreInitial:!0,cwd:this.cwd});n.length>0&&n.forEach(i=>s.add(i)),s.on("add",async i=>{i=(0,D.normalizePath)(i),this.emit("mock:update",i),C("watcher:add",i)}),s.on("change",async i=>{i=(0,D.normalizePath)(i),this.emit("mock:update",i),C("watcher:change",i)}),s.on("unlink",async i=>{i=(0,D.normalizePath)(i),this.emit("mock:unlink",i),C("watcher:unlink",i)}),this.mockWatcher=s}watchDeps(){let t=[];this.depsWatcher=ge.default.watch([],{ignoreInitial:!0,cwd:this.cwd}),this.depsWatcher.on("change",r=>{r=(0,D.normalizePath)(r);let n=this.moduleDeps.get(r);n&&n.forEach(s=>{this.emit("mock:update",s)})}),this.depsWatcher.on("unlink",r=>{r=(0,D.normalizePath)(r),this.moduleDeps.delete(r)}),this.on("update:deps",()=>{let r=[];for(let[s]of this.moduleDeps.entries())r.push(s);let n=r.filter(s=>!t.includes(s));n.length>0&&this.depsWatcher.add(n)})}close(){var t,r;(t=this.mockWatcher)==null||t.close(),(r=this.depsWatcher)==null||r.close()}updateMockList(){this._mockData=de(this.moduleCache)}updateModuleDeps(t,r){Object.keys(r).forEach(n=>{r[n].imports.map(i=>i.path).forEach(i=>{this.moduleDeps.has(i)||this.moduleDeps.set(i,new Set),this.moduleDeps.get(i).add(t)})}),this.emit("update:deps")}async loadMock(t){if(!t)return;let r=!1;/\.m[jt]s$/.test(t)?r=!0:/\.c[jt]s$/.test(t)?r=!1:r=this.moduleType==="esm";let{code:n,deps:s}=await this.transformWithEsbuild(t,r);try{let i=await this.loadFromCode(t,n,r)||{},c;i.default?c=i.default:(c=[],Object.keys(i).forEach(a=>{S(i[a])?c.push(...i[a]):c.push(i[a])})),S(c)?c.forEach(a=>a.__filepath__=t):c.__filepath__=t,this.moduleCache.set(t,c),this.updateModuleDeps(t,s)}catch(i){console.error(i)}}async loadFromCode(t,r,n){if(n){let s=`${t}.timestamp-${Date.now()}`,i=`${s}.mjs`,c=`${(0,Ke.pathToFileURL)(s)}.mjs`;await re.default.promises.writeFile(i,r,"utf8");try{return await import(c)}finally{try{re.default.unlinkSync(i)}catch{}}}else{t=fe.default.resolve(this.cwd,t);let s=fe.default.extname(t),i=re.default.realpathSync(t),c=s in T.extensions?s:".js",a=T.extensions[c];T.extensions[c]=(x,M)=>{M===i?x._compile(r,M):a(x,M)},delete T.cache[T.resolve(t)];let m=T(t);return T.extensions[c]=a,m.__esModule?m:{default:m}}}async transformWithEsbuild(t,r){var n;try{let s=await(0,Xe.build)({entryPoints:[t],outfile:"out.js",write:!1,target:["node14.18","node16"],platform:"node",bundle:!0,metafile:!0,format:r?"esm":"cjs",define:this.options.define,plugins:[K(this.options.alias),G,V,Q]});return{code:s.outputFiles[0].text,deps:((n=s.metafile)==null?void 0:n.inputs)||{}}}catch(s){console.error(s)}return{code:"",deps:{}}}};var ke=require("url"),et=f(require("cookies"),1),ye=require("path-to-regexp"),tt=f(require("picocolors"),1),ot=require("ws");function ve(e,o,t,r){var _;let n=new Map,s=new Map,i=new WeakMap,c=p=>{let l=s.get(p);return!l&&s.set(p,l=new Map),l},a=(p,l)=>{let u=p.get(l);return!u&&p.set(l,u=new ot.WebSocketServer({noServer:!0})),u},m=(p,l)=>{let u=n.get(p);!u&&n.set(p,u=new Set),u.add(l)},x=(p,l,u,d,g,k)=>{var y;try{(y=u.setup)==null||y.call(u,l,d),l.on("close",()=>p.delete(g))}catch(O){W.error(`${tt.default.red("[websocket server error]")} ${k}
51
+ `,O)}},M=(p,l,u,d)=>{p.emit("connection",l,u),l.on("close",()=>{let g=d.findIndex(k=>k.ws===l);g!==-1&&d.splice(g,1)})},N=(p,l,u,d,g)=>{let{cleanupList:k,connectionList:y,context:O}=i.get(l);Ze(k),y.forEach(({ws:R})=>R.removeAllListeners()),l.removeAllListeners(),x(p,l,u,O,d,g),y.forEach(({ws:R,req:E})=>M(l,R,E,y))};(_=e.on)==null||_.call(e,"mock:update-end",p=>{if(!n.has(p))return;let l=n.get(p);if(l)for(let u of l.values())for(let d of e.mockData[u]){if(!d.ws||d.__filepath__!==p)return;let g=c(u);for(let[k,y]of g.entries())N(g,y,d,k,p)}}),o==null||o.on("upgrade",(p,l,u)=>{let{pathname:d,query:g}=(0,ke.parse)(p.url,!0);if(!d||t.length===0||!t.some(b=>ee(b,p.url)))return;let k=e.mockData,y=Object.keys(k).find(b=>(0,ye.pathToRegexp)(b).test(d));if(!y)return;let O=k[y].find(b=>b.url&&b.ws&&(0,ye.pathToRegexp)(b.url).test(d));if(!O)return;let R=O.__filepath__;m(R,y);let E=c(y),I=a(E,d),L=i.get(I);if(!L){let b=[],be={onCleanup:nt=>b.push(nt)};L={cleanupList:b,context:be,connectionList:[]},i.set(I,L),x(E,I,O,be,d,R)}let v=p,H=new et.default(p,p,r),{query:rt}=(0,ke.parse)(p.headers.referer||"",!0);v.query=g,v.refererQuery=rt,v.params=A(y,d),v.getCookie=H.get.bind(H),I.handleUpgrade(v,l,u,b=>{C(`websocket-mock: ${p.url} connected`),L.connectionList.push({req:v,ws:b}),M(I,b,v,L.connectionList)})}),o==null||o.on("close",()=>{for(let p of s.values()){for(let l of p.values()){let u=i.get(l);Ze(u.cleanupList),l.close()}p.clear()}s.clear(),n.clear()})}function Ze(e){let o;for(;o=e.shift();)o==null||o()}async function he(e,o,t,r){let n=new ne({include:w(o.include),exclude:w(o.exclude),define:z(e),alias:e.resolve.alias});n.load(),n.on("mock:update-end",()=>{o.reload&&(r==null||r.send({type:"full-reload"}))}),t==null||t.on("close",()=>n.close());let{httpProxies:s}=Z(e.server.proxy||{}),i=w(o.prefix);return ve(n,t,w(o.wsPrefix),o.cookiesOptions),me(n,{formidableOptions:o.formidableOptions,proxies:[...i,...s],cookiesOptions:o.cookiesOptions})}function Me({prefix:e=[],wsPrefix:o=[],include:t=["mock/**/*.mock.{js,ts,cjs,mjs,json,json5}"],exclude:r=["**/node_modules/**","**/.vscode/**","**/.git/**"],reload:n=!1,formidableOptions:s={},build:i=!1,cookiesOptions:c={}}={}){let a={prefix:e,wsPrefix:o,include:t,exclude:r,reload:n,cookiesOptions:c,formidableOptions:{multiples:!0,...s},build:i?Object.assign({serverPort:8080,dist:"mockServer"},typeof i=="object"?i:{}):!1},m=[_t(a)];return a.build&&m.push(Dt(a)),m}function Dt(e){let o={};return{name:"vite-plugin-mock-dev-server-generator",enforce:"post",apply:"build",configResolved(t){o=t,t.logger.warn("")},async buildEnd(t){t||o.command==="build"&&await Te(this,o,e)}}}function _t(e){let o={};return{name:"vite-plugin-mock-dev-server",enforce:"pre",apply:"serve",config(t){var s;let r=w(e.wsPrefix);if(r.length===0||!((s=t.server)!=null&&s.proxy)||Object.keys(t.server.proxy).length===0)return;let n={};Object.keys(t.server.proxy).forEach(i=>{r.includes(i)||(n[i]=t.server.proxy[i])}),t.server.proxy=n},configResolved(t){o=t,t.logger.warn("")},async configureServer({middlewares:t,config:r,httpServer:n,ws:s}){let i=await he(r,e,n,s);t.use(i)},async configurePreviewServer({middlewares:t,httpServer:r}){let n=await he(o,e,r);t.use(n)}}}function Et(e){return e}function It(e){return t=>(S(t)?t=t.map(r=>e(r)||r):t=e(t)||t,t)}var Lt=Me;0&&(module.exports={baseMiddleware,createDefineMock,defineMock,mockDevServerPlugin,mockWebSocket,transformMockData});
package/dist/index.d.ts CHANGED
@@ -410,12 +410,12 @@ type FormidableFile = formidable.File | formidable.File[];
410
410
  declare function mockDevServerPlugin({ prefix, wsPrefix, include, exclude, reload, formidableOptions, build, cookiesOptions, }?: MockServerPluginOptions): Plugin[];
411
411
 
412
412
  /**
413
- * mock config helper
414
- *
415
- * mock配置辅助函数
413
+ * mock config Type helper
416
414
  *
415
+ * mock配置 类型帮助函数
417
416
  * @param config
418
417
  * @example
418
+ * Mock Http Request
419
419
  * ```ts
420
420
  * export default defineMock({
421
421
  * url: '/api/example',
@@ -423,16 +423,39 @@ declare function mockDevServerPlugin({ prefix, wsPrefix, include, exclude, reloa
423
423
  * body: { a: 1 },
424
424
  * })
425
425
  * ```
426
+ * @example
427
+ * Mock WebSocket
428
+ * ```ts
429
+ * export default defineMock({
430
+ * url: '/socket.io',
431
+ * ws: true,
432
+ * setup(wss) {
433
+ * wss.on('connection', (ws) => {
434
+ * ws.on('message', (rawData) => console.log(rawData))
435
+ * ws.send('data')
436
+ * })
437
+ * },
438
+ * })
439
+ * ```
426
440
  */
427
441
  declare function defineMock(config: MockHttpItem): MockHttpItem;
428
442
  declare function defineMock(config: MockOptions): MockOptions;
429
443
  declare function defineMock(config: MockWebsocketItem): MockWebsocketItem;
430
444
  /**
431
- * 返回一个自定义的 defineMock 函数,用于支持对 mock config 的预处理。
432
- *
433
445
  * Return a custom defineMock function to support preprocessing of mock config.
434
446
  *
447
+ * 返回一个自定义的 defineMock 函数,用于支持对 mock config 的预处理。
435
448
  * @param transformer preprocessing function
449
+ * @example
450
+ * ```ts
451
+ * const definePostMock = createDefineMock((mock) => {
452
+ * mock.url = '/api/post/' + mock.url
453
+ * })
454
+ * export default definePostMock({
455
+ * url: 'list',
456
+ * body: [{ title: '1' }, { title: '2' }],
457
+ * })
458
+ * ```
436
459
  */
437
460
  declare function createDefineMock(transformer: (mock: MockHttpItem | MockWebsocketItem) => MockHttpItem | MockWebsocketItem | void): typeof defineMock;
438
461
 
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
- import Ae from"fs";import Y from"fs/promises";import T from"path";import{build as Ne}from"esbuild";import Ue from"fast-glob";import qe from"is-core-module";import{createFilter as Be,normalizePath as Je}from"vite";var ie="vite-plugin-mock-dev-server",ce="1.1.11";import ae from"fs/promises";import Ee from"path";import Ie from"json5";var B={name:"externalize-deps",setup(t){t.onResolve({filter:/.*/},({path:o})=>{if(o[0]!=="."&&!Ee.isAbsolute(o))return{external:!0}})}},J={name:"json5-loader",setup(t){t.onLoad({filter:/\.json5$/},async({path:o})=>{let e=await ae.readFile(o,"utf-8");return{contents:`export default ${JSON.stringify(Ie.parse(e))}`,loader:"js"}})}},z={name:"json-loader",setup(t){t.onLoad({filter:/\.json$/},async({path:o})=>({contents:`export default ${await ae.readFile(o,"utf-8")}`,loader:"js"}))}},G=t=>({name:"alias-plugin",setup(o){o.onResolve({filter:/.*/},async({path:e})=>{let r=t.find(({find:c})=>Le(c,e));if(!r)return null;let{find:n,replacement:s}=r;return{path:(await o.resolve(e.replace(n,s),{kind:"import-statement",resolveDir:s,namespace:"file"})).path,external:!1}})}});function Le(t,o){return t instanceof RegExp?t.test(o):o.length<t.length?!1:o===t?!0:o.startsWith(`${t}/`)}import V from"fs";import Z from"path";import{fileURLToPath as _e}from"url";import $e from"debug";import{match as Fe}from"path-to-regexp";import pe from"picocolors";var w=t=>Array.isArray(t),P=t=>typeof t=="function",Te=t=>Object.prototype.toString.call(t)==="[object Object]",le=t=>Te(t)&&Object.keys(t).length===0,He=t=>t!==null&&typeof t=="object"&&typeof t.pipe=="function",ue=t=>He(t)&&t.readable!==!1&&typeof t._read=="function"&&typeof t._readableState=="object";function me(t){return new Promise(o=>setTimeout(o,t))}function de(t){return Z.dirname(_e(t))}var j=$e("vite:plugin-mock-dev-server"),O=t=>w(t)?t:t==null?[]:[t],R={info(...t){console.info(pe.cyan("mock-dev-server: "),...t)},error(...t){console.error(`
2
- `,pe.cyan("mock-dev-server: "),...t,`
3
- `)}};function A(t,o,e){for(let n of o){let s=Z.join(t,n);if(V.existsSync(s)&&V.statSync(s).isFile()){let i=e!=null&&e.pathOnly?s:V.readFileSync(s,"utf-8");if(!(e!=null&&e.predicate)||e.predicate(i))return i}}let r=Z.dirname(t);if(r!==t&&(!(e!=null&&e.rootDir)||r.startsWith(e==null?void 0:e.rootDir)))return A(r,o,e)}var Q=(t={})=>{let o=[],e=[];return Object.keys(t).forEach(r=>{var s,i;let n=t[r];typeof n=="string"||!n.ws&&!((s=n.target)!=null&&s.toString().startsWith("ws:"))&&!((i=n.target)!=null&&i.toString().startsWith("wss:"))?o.push(r):e.push(r)}),{httpProxies:o,wsProxies:e}};function X(t,o){return t[0]==="^"&&new RegExp(t).test(o)||o.startsWith(t)}function N(t,o){return(Fe(t,{decode:decodeURIComponent})(o)||{params:{}}).params||{}}async function fe(t,o,e){let r=O(e.include),n=O(e.exclude),s={};if(o.define)for(let p in o.define){let m=o.define[p];s[p]=typeof m=="string"?m:JSON.stringify(m)}let{httpProxies:i}=Q(o.server.proxy||{});i.push(...O(e.prefix));let c=O(e.wsPrefix),u={};try{let p=A(o.root,["package.json"]);p&&(u=JSON.parse(p))}catch{}let d=e.build.dist,v=await Xe(process.cwd(),r,n),h=T.join(o.root,`mock-data-${Date.now()}.js`);await Y.writeFile(h,v,"utf-8");let{code:F,deps:D}=await Ye(h,s,o.resolve.alias),a=ze(D);await Y.unlink(h);let l=[{filename:T.join(d,"mock-data.js"),source:F},{filename:T.join(d,"index.js"),source:Qe(i,c,e.cookiesOptions,e.build.serverPort)},{filename:T.join(d,"package.json"),source:Ge(u,a)}];try{if(T.isAbsolute(d)){await Y.rm(d,{recursive:!0}),Ae.mkdirSync(d,{recursive:!0});for(let{filename:p,source:m}of l)await Y.writeFile(p,m,"utf-8")}else for(let{filename:p,source:m}of l)t.emitFile({type:"asset",fileName:p,source:m})}catch{}}function ze(t){let o=new Set,e=[ie,"connect","cors"];return Object.keys(t).forEach(r=>{t[r].imports.filter(s=>s.external).map(s=>s.path).forEach(s=>{!e.includes(s)&&!qe(s)&&o.add(s)})}),Array.from(o)}function Ge(t,o){let{dependencies:e={},devDependencies:r={}}=t,n={...e,...r},s={name:"mock-server",type:"module",scripts:{start:"node index.js"},dependencies:{connect:"^3.7.0","vite-plugin-mock-dev-server":`^${ce}`,cors:"^2.8.5"},pnpm:{peerDependencyRules:{ignoreMissing:["vite"]}}};return o.forEach(i=>{s.dependencies[i]=n[i]||"latest"}),JSON.stringify(s,null,2)}function Qe(t,o,e={},r=8080){return`import { createServer } from 'node:http';
1
+ import Ue from"fs";import X from"fs/promises";import T from"path";import{build as qe}from"esbuild";import Be from"fast-glob";import Je from"is-core-module";import{createFilter as ze,normalizePath as Ge}from"vite";var ae="vite-plugin-mock-dev-server",pe="1.1.12";var Ee=/import\.meta\.env\.(.+)/;function B(t){let o={},e=process.env.NODE_ENV||t.mode;Object.assign(o,{"process.env.NODE_ENV":JSON.stringify(e),"global.process.env.NODE_ENV":JSON.stringify(e),"globalThis.process.env.NODE_ENV":JSON.stringify(e),__vite_process_env_NODE_ENV:JSON.stringify(e)});let r={},n={};for(let c in t.define){let a=t.define[c];r[c]=typeof a=="string"?a:JSON.stringify(a);let m=c.match(Ee);m&&(n[m[1]]=`__vite__define__${r[c]}`)}let s={},i={};s["import.meta.hot"]="undefined";for(let c in t.env)s[`import.meta.env.${c}`]=JSON.stringify(t.env[c]);return Object.assign(i,{"import.meta.env":JSON.stringify({...t.env,...n}).replace(/"__vite__define__(.+?)"([,}])/g,(c,a,m)=>`${a.replace(/(^\\")|(\\"$)/g,'"')}${m}`)}),{...s,...i,...o}}import le from"fs/promises";import Ie from"path";import Le from"json5";var J={name:"externalize-deps",setup(t){t.onResolve({filter:/.*/},({path:o})=>{if(o[0]!=="."&&!Ie.isAbsolute(o))return{external:!0}})}},z={name:"json5-loader",setup(t){t.onLoad({filter:/\.json5$/},async({path:o})=>{let e=await le.readFile(o,"utf-8");return{contents:`export default ${JSON.stringify(Le.parse(e))}`,loader:"js"}})}},G={name:"json-loader",setup(t){t.onLoad({filter:/\.json$/},async({path:o})=>({contents:`export default ${await le.readFile(o,"utf-8")}`,loader:"js"}))}},Q=t=>({name:"alias-plugin",setup(o){o.onResolve({filter:/.*/},async({path:e})=>{let r=t.find(({find:c})=>$e(c,e));if(!r)return null;let{find:n,replacement:s}=r;return{path:(await o.resolve(e.replace(n,s),{kind:"import-statement",resolveDir:s,namespace:"file"})).path,external:!1}})}});function $e(t,o){return t instanceof RegExp?t.test(o):o.length<t.length?!1:o===t?!0:o.startsWith(`${t}/`)}import Z from"fs";import ee from"path";import{fileURLToPath as Fe}from"url";import Te from"debug";import{match as Ne}from"path-to-regexp";import ue from"picocolors";var S=t=>Array.isArray(t),j=t=>typeof t=="function",He=t=>Object.prototype.toString.call(t)==="[object Object]",te=t=>He(t)&&Object.keys(t).length===0,Ae=t=>t!==null&&typeof t=="object"&&typeof t.pipe=="function",me=t=>Ae(t)&&t.readable!==!1&&typeof t._read=="function"&&typeof t._readableState=="object";function de(t){return new Promise(o=>setTimeout(o,t))}function fe(t){return ee.dirname(Fe(t))}var C=Te("vite:plugin-mock-dev-server"),w=t=>S(t)?t:t==null?[]:[t],R={info(...t){console.info(ue.cyan("mock-dev-server: "),...t)},error(...t){console.error(`
2
+ `,ue.cyan("mock-dev-server: "),...t,`
3
+ `)}};function H(t,o,e){for(let n of o){let s=ee.join(t,n);if(Z.existsSync(s)&&Z.statSync(s).isFile()){let i=e!=null&&e.pathOnly?s:Z.readFileSync(s,"utf-8");if(!(e!=null&&e.predicate)||e.predicate(i))return i}}let r=ee.dirname(t);if(r!==t&&(!(e!=null&&e.rootDir)||r.startsWith(e==null?void 0:e.rootDir)))return H(r,o,e)}var V=(t={})=>{let o=[],e=[];return Object.keys(t).forEach(r=>{var s,i;let n=t[r];typeof n=="string"||!n.ws&&!((s=n.target)!=null&&s.toString().startsWith("ws:"))&&!((i=n.target)!=null&&i.toString().startsWith("wss:"))?o.push(r):e.push(r)}),{httpProxies:o,wsProxies:e}};function K(t,o){return t[0]==="^"&&new RegExp(t).test(o)||o.startsWith(t)}function A(t,o){return(Ne(t,{decode:decodeURIComponent})(o)||{params:{}}).params||{}}async function ge(t,o,e){let r=w(e.include),n=w(e.exclude),s=B(o),{httpProxies:i}=V(o.server.proxy||{});i.push(...w(e.prefix));let c=w(e.wsPrefix),a={};try{let u=H(o.root,["package.json"]);u&&(a=JSON.parse(u))}catch{}let m=e.build.dist,x=await Xe(process.cwd(),r,n),v=T.join(o.root,`mock-data-${Date.now()}.js`);await X.writeFile(v,x,"utf-8");let{code:F,deps:D}=await Ye(v,s,o.resolve.alias),p=Qe(D);await X.unlink(v);let l=[{filename:T.join(m,"mock-data.js"),source:F},{filename:T.join(m,"index.js"),source:Ke(i,c,e.cookiesOptions,e.build.serverPort)},{filename:T.join(m,"package.json"),source:Ve(a,p)}];try{if(T.isAbsolute(m)){await X.rm(m,{recursive:!0}),Ue.mkdirSync(m,{recursive:!0});for(let{filename:u,source:d}of l)await X.writeFile(u,d,"utf-8")}else for(let{filename:u,source:d}of l)t.emitFile({type:"asset",fileName:u,source:d})}catch{}}function Qe(t){let o=new Set,e=[ae,"connect","cors"];return Object.keys(t).forEach(r=>{t[r].imports.filter(s=>s.external).map(s=>s.path).forEach(s=>{!e.includes(s)&&!Je(s)&&o.add(s)})}),Array.from(o)}function Ve(t,o){let{dependencies:e={},devDependencies:r={}}=t,n={...e,...r},s={name:"mock-server",type:"module",scripts:{start:"node index.js"},dependencies:{connect:"^3.7.0","vite-plugin-mock-dev-server":`^${pe}`,cors:"^2.8.5"},pnpm:{peerDependencyRules:{ignoreMissing:["vite"]}}};return o.forEach(i=>{s.dependencies[i]=n[i]||"latest"}),JSON.stringify(s,null,2)}function Ke(t,o,e={},r=8080){return`import { createServer } from 'node:http';
4
4
  import connect from 'connect';
5
5
  import corsMiddleware from 'cors';
6
6
  import { baseMiddleware, mockWebSocket } from 'vite-plugin-mock-dev-server';
@@ -24,8 +24,8 @@ app.use(baseMiddleware({ mockData }, {
24
24
  server.listen(${r});
25
25
 
26
26
  console.log('listen: http://localhost:${r}');
27
- `}async function Xe(t,o,e){let r=await Ue(o,{cwd:t}),n=Be(o,e,{resolve:!1}),s=r.filter(n),i="",c="";return s.forEach((u,d)=>{let v=Je(T.join(t,u));i+=`import * as m${d} from '${v}';
28
- `,c+=`m${d}, `}),`import { transformMockData } from 'vite-plugin-mock-dev-server';
27
+ `}async function Xe(t,o,e){let r=await Be(o,{cwd:t}),n=ze(o,e,{resolve:!1}),s=r.filter(n),i="",c="";return s.forEach((a,m)=>{let x=Ge(T.join(t,a));i+=`import * as m${m} from '${x}';
28
+ `,c+=`m${m}, `}),`import { transformMockData } from 'vite-plugin-mock-dev-server';
29
29
  ${i}
30
30
  const exporters = [${c}];
31
31
  const mockList = exporters.map((raw) => {
@@ -42,10 +42,10 @@ const mockList = exporters.map((raw) => {
42
42
  }
43
43
  return mockConfig
44
44
  });
45
- export default transformMockData(mockList);`}async function Ye(t,o,e){var r;try{let n=await Ne({entryPoints:[t],outfile:"out.js",write:!1,target:["node14.18","node16"],platform:"node",bundle:!0,metafile:!0,format:"esm",define:o,plugins:[G(e),B,J,z]});return{code:n.outputFiles[0].text,deps:((r=n.metafile)==null?void 0:r.inputs)||{}}}catch(n){console.error(n)}return{code:"",deps:{}}}import{Buffer as ye}from"buffer";import{parse as he}from"url";import Ze from"cookies";import et from"http-status";import tt from"lodash.sortby";import*as U from"mime-types";import{pathToRegexp as Me}from"path-to-regexp";import W from"picocolors";import ee from"co-body";import Ke from"formidable";async function ke(t,o){var n;let e=t.method.toUpperCase();if(["GET","DELETE","HEAD"].includes(e))return;let r=((n=t.headers["content-type"])==null?void 0:n.toLocaleLowerCase())||"";try{if(r.startsWith("application/json"))return await ee.json(t);if(r.startsWith("application/x-www-form-urlencoded"))return await ee.form(t);if(r.startsWith("text/plain"))return await ee.text(t);if(r.startsWith("multipart/form-data"))return await Ve(t,o)}catch(s){console.error(s)}}async function Ve(t,o){let e=Ke(o);return new Promise((r,n)=>{e.parse(t,(s,i,c)=>{if(s){n(s);return}r({...i,...c})})})}function ge(t,o){return _(t.headers,o.headers)&&_(t.body,o.body)&&_(t.params,o.params)&&_(t.query,o.query)&&_(t.refererQuery,o.refererQuery)}function _(t,o){if(!o)return!0;for(let e in o)if(o[e]!==t[e])return!1;return!0}var ot=/:/g;function be(t,{formidableOptions:o={},proxies:e,cookiesOptions:r}){return async function(n,s,i){let c=Date.now(),{query:u,pathname:d}=he(n.url,!0);if(!d||e.length===0||!e.some(y=>X(y,n.url)))return i();let v=t.mockData,h=tt(Object.keys(v),y=>{var H;return((H=y.match(ot))==null?void 0:H.length)||0}).find(y=>Me(y).test(d));if(!h)return i();let{query:F}=he(n.headers.referer||"",!0),D=await ke(n,o),a=new Ze(n,s,r),l=a.get.bind(a),p=n.method.toUpperCase(),m=rt(v[h],{pathname:d,method:p,request:{query:u,refererQuery:F,body:D,headers:n.headers,getCookie:l}});if(!m)return i();j("middleware: ",p,n.url);let f=n,k=s;f.body=D,f.query=u,f.refererQuery=F,f.params=N(m.url,d),f.getCookie=l,k.setCookie=a.set.bind(a);let{body:g,delay:S,type:C="json",response:E,status:I=200,statusText:L}=m;if(te(k,I,L),await nt(f,k,m),await st(f,k,m),g){try{let y=P(g)?await g(f):g;await ve(c,S),it(k,y,C)}catch(y){R.error(`${W.red("[body error]")} ${n.url}
46
- `,`file: ${W.cyan(m.__filepath__)}`,y),te(k,500),s.end("")}return}if(E){try{await ve(c,S),await E(f,k,i)}catch(y){R.error(`${W.red("[response error]")} ${n.url}
47
- `,`file: ${W.cyan(m.__filepath__)}`,y),te(k,500),s.end("")}return}s.end("")}}function rt(t,{pathname:o,method:e,request:r}){return t.find(n=>{if(!o||!n||!n.url||n.ws===!0||!(n.method?w(n.method)?n.method:[n.method]:["GET","POST"]).includes(e))return!1;let i=Me(n.url).test(o);if(i&&n.validator){let c=N(n.url,o);if(P(n.validator))return n.validator({params:c,...r});try{return ge({params:c,...r},n.validator)}catch(u){return R.error(`${W.red("[validator error]")} ${o}
48
- `,`file: ${W.cyan(n.__filepath__)}`,u),!1}}return i})}function te(t,o=200,e){t.statusCode=o,t.statusMessage=e||ct(o)}async function nt(t,o,{headers:e,type:r="json"}){let n=U.contentType(r)||U.contentType(U.lookup(r)||"");if(n&&o.setHeader("Content-Type",n),o.setHeader("Cache-Control","no-cache,max-age=0"),o.setHeader("X-Mock","generate by vite:plugin-mock-dev-server"),!!e)try{let s=P(e)?await e(t):e;Object.keys(s).forEach(i=>{o.setHeader(i,s[i])})}catch(s){R.error(`${W.red("[headers error]")} ${t.url}
49
- `,s)}}async function st(t,o,{cookies:e}){if(e)try{let r=P(e)?await e(t):e;Object.keys(r).forEach(n=>{let s=r[n];if(w(s)){let[i,c]=s;o.setCookie(n,i,c)}else o.setCookie(n,s)})}catch(r){R.error(`${W.red("[cookies error]")} ${t.url}
50
- `,r)}}function it(t,o,e){if(ue(o))o.pipe(t);else if(ye.isBuffer(o))t.end(e==="text"||e==="json"?o.toString("utf-8"):o);else{let r=typeof o=="string"?o:JSON.stringify(o);t.end(e==="buffer"?ye.from(r):r)}}async function ve(t,o){if(!o||o<=0)return;let e=Date.now()-t,r=o-e;r>0&&await me(r)}function ct(t){return et[t]||"Unknown"}import ut from"events";import oe from"fs";import{createRequire as mt}from"module";import we from"path";import{pathToFileURL as dt}from"url";import Se from"chokidar";import{build as ft}from"esbuild";import kt from"fast-glob";import{createFilter as gt,normalizePath as q}from"vite";import{parse as at}from"url";import pt from"lodash.sortby";function xe(t){let o=[];for(let[,r]of t.entries())r&&(w(r)?o.push(...r):o.push(r));let e={};return o.filter(r=>(r.enabled||typeof r.enabled>"u")&&r.url).forEach(r=>{let{pathname:n,query:s}=at(r.url,!0),i=e[n]??(e[n]=[]),c={...r,url:n};if(c.ws!==!0){let u=c.validator;le(s)||(P(u)?c.validator=function(d){return _(d.query,s)&&u(d)}:u?(c.validator={...u},c.validator.query=c.validator.query?{...s,...c.validator.query}:s):c.validator={query:s})}i.push(c)}),Object.keys(e).forEach(r=>{e[r]=pt(e[r],n=>{if(n.ws===!0)return 0;let{validator:s}=n;return s?P(s)?0:1/Object.keys(s).reduce((c,u)=>c+lt(s[u]),0):2})}),e}function lt(t){return t?Object.keys(t).length:0}var yt=de(import.meta.url),$=mt(yt),K=class extends ut{constructor(e){super();this.options=e;this.moduleCache=new Map;this.moduleDeps=new Map;this.moduleType="cjs";this._mockData={};this.cwd=e.cwd||process.cwd();try{let r=A(this.cwd,["package.json"]);this.moduleType=r&&JSON.parse(r).type==="module"?"esm":"cjs"}catch{}}get mockData(){return this._mockData}load(){let{include:e,exclude:r}=this.options,n=gt(e,r,{resolve:!1});kt(e,{cwd:this.cwd}).then(i=>Promise.all(i.filter(n).map(c=>this.loadMock(c)))).then(()=>this.updateMockList()),this.watchMockEntry(),this.watchDeps();let s=null;this.on("mock:update",async i=>{n(i)&&(await this.loadMock(i),s&&clearImmediate(s),s=setImmediate(()=>{this.updateMockList(),this.emit("mock:update-end",i),s=null}))}),this.on("mock:unlink",async i=>{n(i)&&(this.moduleCache.delete(i),this.updateMockList(),this.emit("mock:update-end",i))})}watchMockEntry(){let{include:e}=this.options,[r,...n]=e,s=Se.watch(r,{ignoreInitial:!0,cwd:this.cwd});n.length>0&&n.forEach(i=>s.add(i)),s.on("add",async i=>{i=q(i),this.emit("mock:update",i),j("watcher:add",i)}),s.on("change",async i=>{i=q(i),this.emit("mock:update",i),j("watcher:change",i)}),s.on("unlink",async i=>{i=q(i),this.emit("mock:unlink",i),j("watcher:unlink",i)}),this.mockWatcher=s}watchDeps(){let e=[];this.depsWatcher=Se.watch([],{ignoreInitial:!0,cwd:this.cwd}),this.depsWatcher.on("change",r=>{r=q(r);let n=this.moduleDeps.get(r);n&&n.forEach(s=>{this.emit("mock:update",s)})}),this.depsWatcher.on("unlink",r=>{r=q(r),this.moduleDeps.delete(r)}),this.on("update:deps",()=>{let r=[];for(let[s]of this.moduleDeps.entries())r.push(s);let n=r.filter(s=>!e.includes(s));n.length>0&&this.depsWatcher.add(n)})}close(){var e,r;(e=this.mockWatcher)==null||e.close(),(r=this.depsWatcher)==null||r.close()}updateMockList(){this._mockData=xe(this.moduleCache)}updateModuleDeps(e,r){Object.keys(r).forEach(n=>{r[n].imports.map(i=>i.path).forEach(i=>{this.moduleDeps.has(i)||this.moduleDeps.set(i,new Set),this.moduleDeps.get(i).add(e)})}),this.emit("update:deps")}async loadMock(e){if(!e)return;let r=!1;/\.m[jt]s$/.test(e)?r=!0:/\.c[jt]s$/.test(e)?r=!1:r=this.moduleType==="esm";let{code:n,deps:s}=await this.transformWithEsbuild(e,r);try{let i=await this.loadFromCode(e,n,r)||{},c;i.default?c=i.default:(c=[],Object.keys(i).forEach(u=>{w(i[u])?c.push(...i[u]):c.push(i[u])})),w(c)?c.forEach(u=>u.__filepath__=e):c.__filepath__=e,this.moduleCache.set(e,c),this.updateModuleDeps(e,s)}catch(i){console.error(i)}}async loadFromCode(e,r,n){if(n){let s=`${e}.timestamp-${Date.now()}`,i=`${s}.mjs`,c=`${dt(s)}.mjs`;await oe.promises.writeFile(i,r,"utf8");try{return await import(c)}finally{try{oe.unlinkSync(i)}catch{}}}else{e=we.resolve(this.cwd,e);let s=we.extname(e),i=oe.realpathSync(e),c=s in $.extensions?s:".js",u=$.extensions[c];$.extensions[c]=(v,h)=>{h===i?v._compile(r,h):u(v,h)},delete $.cache[$.resolve(e)];let d=$(e);return $.extensions[c]=u,d.__esModule?d:{default:d}}}async transformWithEsbuild(e,r){var n;try{let s=await ft({entryPoints:[e],outfile:"out.js",write:!1,target:["node14.18","node16"],platform:"node",bundle:!0,metafile:!0,format:r?"esm":"cjs",define:this.options.define,plugins:[G(this.options.alias),B,z,J]});return{code:s.outputFiles[0].text,deps:((n=s.metafile)==null?void 0:n.inputs)||{}}}catch(s){console.error(s)}return{code:"",deps:{}}}};import{parse as Oe}from"url";import ht from"cookies";import{pathToRegexp as Ce}from"path-to-regexp";import vt from"picocolors";import{WebSocketServer as Mt}from"ws";function je(t,o,e,r){var D;let n=new Map,s=new Map,i=new WeakMap,c=a=>{let l=s.get(a);return!l&&s.set(a,l=new Map),l},u=(a,l)=>{let p=a.get(l);return!p&&a.set(l,p=new Mt({noServer:!0})),p},d=(a,l)=>{let p=n.get(a);!p&&n.set(a,p=new Set),p.add(l)},v=(a,l,p,m,f,k)=>{var g;try{(g=p.setup)==null||g.call(p,l,m),l.on("close",()=>{a.delete(f)})}catch(S){R.error(`${vt.red("[websocket server error]")} ${k}
51
- `,S)}},h=(a,l,p,m)=>{a.emit("connection",l,p),l.on("close",()=>{let f=m.findIndex(k=>k.ws===l);f!==-1&&m.splice(f,1)})},F=(a,l,p,m,f)=>{let{cleanupList:k,connectionList:g,context:S}=i.get(l);Pe(k),g.forEach(({ws:C})=>C.removeAllListeners()),l.removeAllListeners(),v(a,l,p,S,m,f),g.forEach(({ws:C,req:E})=>h(l,C,E,g))};(D=t.on)==null||D.call(t,"mock:update-end",a=>{if(!n.has(a))return;let l=n.get(a);if(l)for(let p of l.values())for(let m of t.mockData[p]){if(!m.ws||m.__filepath__!==a)return;let f=c(p);for(let[k,g]of f.entries())F(f,g,m,k,a)}}),o==null||o.on("upgrade",(a,l,p)=>{let{pathname:m,query:f}=Oe(a.url,!0);if(!m||e.length===0||!e.some(M=>X(M,a.url)))return;let k=t.mockData,g=Object.keys(k).find(M=>Ce(M).test(m));if(!g)return;let S=k[g].find(M=>M.url&&M.ws&&Ce(M.url).test(m));if(!S)return;let C=S.__filepath__;d(C,g);let E=c(g),I=u(E,m),L=i.get(I);if(!L){let M=[],ne={onCleanup:De=>M.push(De)};L={cleanupList:M,context:ne,connectionList:[]},i.set(I,L),v(E,I,S,ne,m,C)}let y=a,H=new ht(a,a,r),{query:We}=Oe(a.headers.referer||"",!0);y.query=f,y.refererQuery=We,y.params=N(g,m),y.getCookie=H.get.bind(H),I.handleUpgrade(y,l,p,M=>{j(`websocket-mock: ${a.url} connected`),L.connectionList.push({req:y,ws:M}),h(I,M,y,L.connectionList)})}),o==null||o.on("close",()=>{for(let a of s.values()){for(let l of a.values()){let p=i.get(l);Pe(p.cleanupList),l.close()}a.clear()}s.clear(),n.clear()})}function Pe(t){let o;for(;o=t.shift();)o==null||o()}async function re(t,o,e,r){let n=O(o.include),s=O(o.exclude),i={};if(t.define)for(let v in t.define){let h=t.define[v];i[v]=typeof h=="string"?h:JSON.stringify(h)}let c=new K({include:n,exclude:s,define:i,alias:t.resolve.alias});c.load(),c.on("mock:update-end",()=>{o.reload&&(r==null||r.send({type:"full-reload"}))}),e==null||e.on("close",()=>c.close());let{httpProxies:u}=Q(t.server.proxy||{}),d=O(o.prefix);return je(c,e,O(o.wsPrefix),o.cookiesOptions),be(c,{formidableOptions:o.formidableOptions,proxies:[...d,...u],cookiesOptions:o.cookiesOptions})}function Re({prefix:t=[],wsPrefix:o=[],include:e=["mock/**/*.mock.{js,ts,cjs,mjs,json,json5}"],exclude:r=["**/node_modules/**","**/.vscode/**","**/.git/**"],reload:n=!1,formidableOptions:s={},build:i=!1,cookiesOptions:c={}}={}){let u={prefix:t,wsPrefix:o,include:e,exclude:r,reload:n,cookiesOptions:c,formidableOptions:{multiples:!0,...s},build:i?Object.assign({serverPort:8080,dist:"mockServer"},typeof i=="object"?i:{}):!1},d=[xt(u)];return u.build&&d.push(bt(u)),d}function bt(t){let o={};return{name:"vite-plugin-mock-dev-server-generator",enforce:"post",apply:"build",configResolved(e){o=e,e.logger.warn("")},async buildEnd(e){e||o.command==="build"&&await fe(this,o,t)}}}function xt(t){let o={};return{name:"vite-plugin-mock-dev-server",enforce:"pre",apply:"serve",configResolved(e){o=e,e.logger.warn("")},async configureServer({middlewares:e,config:r,httpServer:n,ws:s}){let i=await re(r,t,n,s);e.use(i)},async configurePreviewServer({middlewares:e,httpServer:r}){let n=await re(o,t,r);e.use(n)}}}function Zo(t){return t}function er(t){return e=>(w(e)?e=e.map(r=>t(r)||r):e=t(e)||e,e)}var nr=Re;export{be as baseMiddleware,er as createDefineMock,nr as default,Zo as defineMock,Re as mockDevServerPlugin,je as mockWebSocket,xe as transformMockData};
45
+ export default transformMockData(mockList);`}async function Ye(t,o,e){var r;try{let n=await qe({entryPoints:[t],outfile:"out.js",write:!1,target:["node14.18","node16"],platform:"node",bundle:!0,metafile:!0,format:"esm",define:o,plugins:[Q(e),J,z,G]});return{code:n.outputFiles[0].text,deps:((r=n.metafile)==null?void 0:r.inputs)||{}}}catch(n){console.error(n)}return{code:"",deps:{}}}import{Buffer as ve}from"buffer";import{parse as he}from"url";import tt from"cookies";import ot from"http-status";import rt from"lodash.sortby";import*as U from"mime-types";import{pathToRegexp as be}from"path-to-regexp";import W from"picocolors";import oe from"co-body";import Ze from"formidable";async function ke(t,o){var n;let e=t.method.toUpperCase();if(["GET","DELETE","HEAD"].includes(e))return;let r=((n=t.headers["content-type"])==null?void 0:n.toLocaleLowerCase())||"";try{if(r.startsWith("application/json"))return await oe.json(t);if(r.startsWith("application/x-www-form-urlencoded"))return await oe.form(t);if(r.startsWith("text/plain"))return await oe.text(t);if(r.startsWith("multipart/form-data"))return await et(t,o)}catch(s){console.error(s)}}async function et(t,o){let e=Ze(o);return new Promise((r,n)=>{e.parse(t,(s,i,c)=>{if(s){n(s);return}r({...i,...c})})})}function ye(t,o){return L(t.headers,o.headers)&&L(t.body,o.body)&&L(t.params,o.params)&&L(t.query,o.query)&&L(t.refererQuery,o.refererQuery)}function L(t,o){if(!o)return!0;for(let e in o)if(o[e]!==t[e])return!1;return!0}var nt=/:/g;function xe(t,{formidableOptions:o={},proxies:e,cookiesOptions:r}){return async function(n,s,i){let c=Date.now(),{query:a,pathname:m}=he(n.url,!0);if(!m||e.length===0||!e.some(y=>K(y,n.url)))return i();let x=t.mockData,v=rt(Object.keys(x),y=>{var N;return((N=y.match(nt))==null?void 0:N.length)||0}).find(y=>be(y).test(m));if(!v)return i();let{query:F}=he(n.headers.referer||"",!0),D=await ke(n,o),p=new tt(n,s,r),l=p.get.bind(p),u=n.method.toUpperCase(),d=st(x[v],{pathname:m,method:u,request:{query:a,refererQuery:F,body:D,headers:n.headers,getCookie:l}});if(!d)return i();C("middleware: ",u,n.url);let f=n,g=s;f.body=D,f.query=a,f.refererQuery=F,f.params=A(d.url,m),f.getCookie=l,g.setCookie=p.set.bind(p);let{body:k,delay:O,type:P="json",response:_,status:E=200,statusText:I}=d;if(re(g,E,I),await it(f,g,d),await ct(f,g,d),k){try{let y=j(k)?await k(f):k;await Me(c,O),at(g,y,P)}catch(y){R.error(`${W.red("[body error]")} ${n.url}
46
+ `,`file: ${W.cyan(d.__filepath__)}`,y),re(g,500),s.end("")}return}if(_){try{await Me(c,O),await _(f,g,i)}catch(y){R.error(`${W.red("[response error]")} ${n.url}
47
+ `,`file: ${W.cyan(d.__filepath__)}`,y),re(g,500),s.end("")}return}s.end("")}}function st(t,{pathname:o,method:e,request:r}){return t.find(n=>{if(!o||!n||!n.url||n.ws===!0||!(n.method?S(n.method)?n.method:[n.method]:["GET","POST"]).includes(e))return!1;let i=be(n.url).test(o);if(i&&n.validator){let c=A(n.url,o);if(j(n.validator))return n.validator({params:c,...r});try{return ye({params:c,...r},n.validator)}catch(a){return R.error(`${W.red("[validator error]")} ${o}
48
+ `,`file: ${W.cyan(n.__filepath__)}`,a),!1}}return i})}function re(t,o=200,e){t.statusCode=o,t.statusMessage=e||pt(o)}async function it(t,o,e){let{headers:r,type:n="json"}=e,s=e.__filepath__,i=U.contentType(n)||U.contentType(U.lookup(n)||"");if(i&&o.setHeader("Content-Type",i),o.setHeader("Cache-Control","no-cache,max-age=0"),o.setHeader("X-Mock-Power-By","vite-plugin-mock-dev-server"),o.setHeader("X-File-Path",s),!!r)try{let c=j(r)?await r(t):r;Object.keys(c).forEach(a=>{o.setHeader(a,c[a])})}catch(c){R.error(`${W.red("[headers error]")} ${t.url}
49
+ `,c)}}async function ct(t,o,{cookies:e}){if(e)try{let r=j(e)?await e(t):e;Object.keys(r).forEach(n=>{let s=r[n];if(S(s)){let[i,c]=s;o.setCookie(n,i,c)}else o.setCookie(n,s)})}catch(r){R.error(`${W.red("[cookies error]")} ${t.url}
50
+ `,r)}}function at(t,o,e){if(me(o))o.pipe(t);else if(ve.isBuffer(o))t.end(e==="text"||e==="json"?o.toString("utf-8"):o);else{let r=typeof o=="string"?o:JSON.stringify(o);t.end(e==="buffer"?ve.from(r):r)}}async function Me(t,o){if(!o||o<=0)return;let e=Date.now()-t,r=o-e;r>0&&await de(r)}function pt(t){return ot[t]||"Unknown"}import dt from"events";import ne from"fs";import{createRequire as ft}from"module";import Se from"path";import{pathToFileURL as gt}from"url";import Oe from"chokidar";import{build as kt}from"esbuild";import yt from"fast-glob";import{createFilter as vt,normalizePath as q}from"vite";import{parse as lt}from"url";import ut from"lodash.sortby";function we(t){let o=[];for(let[,r]of t.entries())r&&(S(r)?o.push(...r):o.push(r));let e={};return o.filter(r=>(r.enabled||typeof r.enabled>"u")&&r.url).forEach(r=>{let{pathname:n,query:s}=lt(r.url,!0),i=e[n]??(e[n]=[]),c={...r,url:n};if(c.ws!==!0){let a=c.validator;te(s)||(j(a)?c.validator=function(m){return L(m.query,s)&&a(m)}:a?(c.validator={...a},c.validator.query=c.validator.query?{...s,...c.validator.query}:s):c.validator={query:s})}i.push(c)}),Object.keys(e).forEach(r=>{e[r]=ut(e[r],n=>{if(n.ws===!0)return 0;let{validator:s}=n;return!s||te(s)?2:j(s)?0:1/Object.keys(s).reduce((c,a)=>c+mt(s[a]),0)})}),e}function mt(t){return t?Object.keys(t).length:0}var ht=fe(import.meta.url),$=ft(ht),Y=class extends dt{constructor(e){super();this.options=e;this.moduleCache=new Map;this.moduleDeps=new Map;this.moduleType="cjs";this._mockData={};this.cwd=e.cwd||process.cwd();try{let r=H(this.cwd,["package.json"]);this.moduleType=r&&JSON.parse(r).type==="module"?"esm":"cjs"}catch{}}get mockData(){return this._mockData}load(){let{include:e,exclude:r}=this.options,n=vt(e,r,{resolve:!1});yt(e,{cwd:this.cwd}).then(i=>Promise.all(i.filter(n).map(c=>this.loadMock(c)))).then(()=>this.updateMockList()),this.watchMockEntry(),this.watchDeps();let s=null;this.on("mock:update",async i=>{n(i)&&(await this.loadMock(i),s&&clearImmediate(s),s=setImmediate(()=>{this.updateMockList(),this.emit("mock:update-end",i),s=null}))}),this.on("mock:unlink",async i=>{n(i)&&(this.moduleCache.delete(i),this.updateMockList(),this.emit("mock:update-end",i))})}watchMockEntry(){let{include:e}=this.options,[r,...n]=e,s=Oe.watch(r,{ignoreInitial:!0,cwd:this.cwd});n.length>0&&n.forEach(i=>s.add(i)),s.on("add",async i=>{i=q(i),this.emit("mock:update",i),C("watcher:add",i)}),s.on("change",async i=>{i=q(i),this.emit("mock:update",i),C("watcher:change",i)}),s.on("unlink",async i=>{i=q(i),this.emit("mock:unlink",i),C("watcher:unlink",i)}),this.mockWatcher=s}watchDeps(){let e=[];this.depsWatcher=Oe.watch([],{ignoreInitial:!0,cwd:this.cwd}),this.depsWatcher.on("change",r=>{r=q(r);let n=this.moduleDeps.get(r);n&&n.forEach(s=>{this.emit("mock:update",s)})}),this.depsWatcher.on("unlink",r=>{r=q(r),this.moduleDeps.delete(r)}),this.on("update:deps",()=>{let r=[];for(let[s]of this.moduleDeps.entries())r.push(s);let n=r.filter(s=>!e.includes(s));n.length>0&&this.depsWatcher.add(n)})}close(){var e,r;(e=this.mockWatcher)==null||e.close(),(r=this.depsWatcher)==null||r.close()}updateMockList(){this._mockData=we(this.moduleCache)}updateModuleDeps(e,r){Object.keys(r).forEach(n=>{r[n].imports.map(i=>i.path).forEach(i=>{this.moduleDeps.has(i)||this.moduleDeps.set(i,new Set),this.moduleDeps.get(i).add(e)})}),this.emit("update:deps")}async loadMock(e){if(!e)return;let r=!1;/\.m[jt]s$/.test(e)?r=!0:/\.c[jt]s$/.test(e)?r=!1:r=this.moduleType==="esm";let{code:n,deps:s}=await this.transformWithEsbuild(e,r);try{let i=await this.loadFromCode(e,n,r)||{},c;i.default?c=i.default:(c=[],Object.keys(i).forEach(a=>{S(i[a])?c.push(...i[a]):c.push(i[a])})),S(c)?c.forEach(a=>a.__filepath__=e):c.__filepath__=e,this.moduleCache.set(e,c),this.updateModuleDeps(e,s)}catch(i){console.error(i)}}async loadFromCode(e,r,n){if(n){let s=`${e}.timestamp-${Date.now()}`,i=`${s}.mjs`,c=`${gt(s)}.mjs`;await ne.promises.writeFile(i,r,"utf8");try{return await import(c)}finally{try{ne.unlinkSync(i)}catch{}}}else{e=Se.resolve(this.cwd,e);let s=Se.extname(e),i=ne.realpathSync(e),c=s in $.extensions?s:".js",a=$.extensions[c];$.extensions[c]=(x,v)=>{v===i?x._compile(r,v):a(x,v)},delete $.cache[$.resolve(e)];let m=$(e);return $.extensions[c]=a,m.__esModule?m:{default:m}}}async transformWithEsbuild(e,r){var n;try{let s=await kt({entryPoints:[e],outfile:"out.js",write:!1,target:["node14.18","node16"],platform:"node",bundle:!0,metafile:!0,format:r?"esm":"cjs",define:this.options.define,plugins:[Q(this.options.alias),J,G,z]});return{code:s.outputFiles[0].text,deps:((n=s.metafile)==null?void 0:n.inputs)||{}}}catch(s){console.error(s)}return{code:"",deps:{}}}};import{parse as Pe}from"url";import Mt from"cookies";import{pathToRegexp as je}from"path-to-regexp";import bt from"picocolors";import{WebSocketServer as xt}from"ws";function Re(t,o,e,r){var D;let n=new Map,s=new Map,i=new WeakMap,c=p=>{let l=s.get(p);return!l&&s.set(p,l=new Map),l},a=(p,l)=>{let u=p.get(l);return!u&&p.set(l,u=new xt({noServer:!0})),u},m=(p,l)=>{let u=n.get(p);!u&&n.set(p,u=new Set),u.add(l)},x=(p,l,u,d,f,g)=>{var k;try{(k=u.setup)==null||k.call(u,l,d),l.on("close",()=>p.delete(f))}catch(O){R.error(`${bt.red("[websocket server error]")} ${g}
51
+ `,O)}},v=(p,l,u,d)=>{p.emit("connection",l,u),l.on("close",()=>{let f=d.findIndex(g=>g.ws===l);f!==-1&&d.splice(f,1)})},F=(p,l,u,d,f)=>{let{cleanupList:g,connectionList:k,context:O}=i.get(l);Ce(g),k.forEach(({ws:P})=>P.removeAllListeners()),l.removeAllListeners(),x(p,l,u,O,d,f),k.forEach(({ws:P,req:_})=>v(l,P,_,k))};(D=t.on)==null||D.call(t,"mock:update-end",p=>{if(!n.has(p))return;let l=n.get(p);if(l)for(let u of l.values())for(let d of t.mockData[u]){if(!d.ws||d.__filepath__!==p)return;let f=c(u);for(let[g,k]of f.entries())F(f,k,d,g,p)}}),o==null||o.on("upgrade",(p,l,u)=>{let{pathname:d,query:f}=Pe(p.url,!0);if(!d||e.length===0||!e.some(h=>K(h,p.url)))return;let g=t.mockData,k=Object.keys(g).find(h=>je(h).test(d));if(!k)return;let O=g[k].find(h=>h.url&&h.ws&&je(h.url).test(d));if(!O)return;let P=O.__filepath__;m(P,k);let _=c(k),E=a(_,d),I=i.get(E);if(!I){let h=[],ie={onCleanup:_e=>h.push(_e)};I={cleanupList:h,context:ie,connectionList:[]},i.set(E,I),x(_,E,O,ie,d,P)}let y=p,N=new Mt(p,p,r),{query:De}=Pe(p.headers.referer||"",!0);y.query=f,y.refererQuery=De,y.params=A(k,d),y.getCookie=N.get.bind(N),E.handleUpgrade(y,l,u,h=>{C(`websocket-mock: ${p.url} connected`),I.connectionList.push({req:y,ws:h}),v(E,h,y,I.connectionList)})}),o==null||o.on("close",()=>{for(let p of s.values()){for(let l of p.values()){let u=i.get(l);Ce(u.cleanupList),l.close()}p.clear()}s.clear(),n.clear()})}function Ce(t){let o;for(;o=t.shift();)o==null||o()}async function se(t,o,e,r){let n=new Y({include:w(o.include),exclude:w(o.exclude),define:B(t),alias:t.resolve.alias});n.load(),n.on("mock:update-end",()=>{o.reload&&(r==null||r.send({type:"full-reload"}))}),e==null||e.on("close",()=>n.close());let{httpProxies:s}=V(t.server.proxy||{}),i=w(o.prefix);return Re(n,e,w(o.wsPrefix),o.cookiesOptions),xe(n,{formidableOptions:o.formidableOptions,proxies:[...i,...s],cookiesOptions:o.cookiesOptions})}function We({prefix:t=[],wsPrefix:o=[],include:e=["mock/**/*.mock.{js,ts,cjs,mjs,json,json5}"],exclude:r=["**/node_modules/**","**/.vscode/**","**/.git/**"],reload:n=!1,formidableOptions:s={},build:i=!1,cookiesOptions:c={}}={}){let a={prefix:t,wsPrefix:o,include:e,exclude:r,reload:n,cookiesOptions:c,formidableOptions:{multiples:!0,...s},build:i?Object.assign({serverPort:8080,dist:"mockServer"},typeof i=="object"?i:{}):!1},m=[St(a)];return a.build&&m.push(wt(a)),m}function wt(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 ge(this,o,t)}}}function St(t){let o={};return{name:"vite-plugin-mock-dev-server",enforce:"pre",apply:"serve",config(e){var s;let r=w(t.wsPrefix);if(r.length===0||!((s=e.server)!=null&&s.proxy)||Object.keys(e.server.proxy).length===0)return;let n={};Object.keys(e.server.proxy).forEach(i=>{r.includes(i)||(n[i]=e.server.proxy[i])}),e.server.proxy=n},configResolved(e){o=e,e.logger.warn("")},async configureServer({middlewares:e,config:r,httpServer:n,ws:s}){let i=await se(r,t,n,s);e.use(i)},async configurePreviewServer({middlewares:e,httpServer:r}){let n=await se(o,t,r);e.use(n)}}}function ir(t){return t}function cr(t){return e=>(S(e)?e=e.map(r=>t(r)||r):e=t(e)||e,e)}var ur=We;export{xe as baseMiddleware,cr as createDefineMock,ur as default,ir as defineMock,We as mockDevServerPlugin,Re as mockWebSocket,we as transformMockData};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vite-plugin-mock-dev-server",
3
- "version": "1.1.11",
3
+ "version": "1.1.12",
4
4
  "keywords": [
5
5
  "vite",
6
6
  "plugin",