vite-plugin-mock-dev-server 2.2.0 → 2.2.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/dist/helper.d.ts +1 -1
- package/dist/{index-DFfi42My.d.ts → index-BmZUk72e.d.ts} +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +3 -3
- package/dist/server-B4Hh46_a.js +2 -0
- package/dist/{server-CNOA4TyP.d.ts → server-a8HL1JRZ.d.ts} +1 -1
- package/dist/server.d.ts +1 -1
- package/dist/server.js +1 -1
- package/dist/types.d.ts +1 -1
- package/package.json +5 -5
- package/dist/server-BJ-Z5r-p.js +0 -2
package/dist/helper.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { C as MockRequest, D as GetCookieOption, E as CookiesOption, O as SetCookieOption, S as Method, T as ResponseBody, _ as RecordedRequest, a as MockErrorConfig, b as ExtraRequest, c as LogLevel, d as MockMatchSpecialPriority, f as MockServerPluginOptions, g as RecordedReq, h as RecordedMeta, i as WebSocketSetupContext, l as LogType, m as RecordOptions, n as MockOptions, o as MockHttpItem, p as ServerBuildOption, r as MockWebsocketItem, s as BodyParserOptions, t as FormidableFile, u as MockMatchPriority, v as RecordedRes, w as MockResponse, x as Headers, y as ResolvedRecordOptions } from "./index-
|
|
1
|
+
import { C as MockRequest, D as GetCookieOption, E as CookiesOption, O as SetCookieOption, S as Method, T as ResponseBody, _ as RecordedRequest, a as MockErrorConfig, b as ExtraRequest, c as LogLevel, d as MockMatchSpecialPriority, f as MockServerPluginOptions, g as RecordedReq, h as RecordedMeta, i as WebSocketSetupContext, l as LogType, m as RecordOptions, n as MockOptions, o as MockHttpItem, p as ServerBuildOption, r as MockWebsocketItem, s as BodyParserOptions, t as FormidableFile, u as MockMatchPriority, v as RecordedRes, w as MockResponse, x as Headers, y as ResolvedRecordOptions } from "./index-BmZUk72e.js";
|
|
2
2
|
import { IncomingMessage, OutgoingHttpHeaders, ServerResponse } from "node:http";
|
|
3
3
|
import { Transform } from "node:stream";
|
|
4
4
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
+
import { Buffer } from "node:buffer";
|
|
1
2
|
import { CorsOptions } from "cors";
|
|
2
3
|
import { Options } from "co-body";
|
|
3
4
|
import formidable from "formidable";
|
|
4
5
|
import http from "node:http";
|
|
5
|
-
import { Buffer } from "node:buffer";
|
|
6
6
|
import { WebSocketServer } from "ws";
|
|
7
7
|
import { Readable } from "node:stream";
|
|
8
8
|
import { Connect } from "vite";
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { C as MockRequest, D as GetCookieOption, E as CookiesOption, O as SetCookieOption, S as Method, T as ResponseBody, _ as RecordedRequest, a as MockErrorConfig, b as ExtraRequest, c as LogLevel, d as MockMatchSpecialPriority, f as MockServerPluginOptions, g as RecordedReq, h as RecordedMeta, i as WebSocketSetupContext, l as LogType, m as RecordOptions, n as MockOptions, o as MockHttpItem, p as ServerBuildOption, r as MockWebsocketItem, s as BodyParserOptions, t as FormidableFile, u as MockMatchPriority, v as RecordedRes, w as MockResponse, x as Headers, y as ResolvedRecordOptions } from "./index-
|
|
1
|
+
import { C as MockRequest, D as GetCookieOption, E as CookiesOption, O as SetCookieOption, S as Method, T as ResponseBody, _ as RecordedRequest, a as MockErrorConfig, b as ExtraRequest, c as LogLevel, d as MockMatchSpecialPriority, f as MockServerPluginOptions, g as RecordedReq, h as RecordedMeta, i as WebSocketSetupContext, l as LogType, m as RecordOptions, n as MockOptions, o as MockHttpItem, p as ServerBuildOption, r as MockWebsocketItem, s as BodyParserOptions, t as FormidableFile, u as MockMatchPriority, v as RecordedRes, w as MockResponse, x as Headers, y as ResolvedRecordOptions } from "./index-BmZUk72e.js";
|
|
2
2
|
import { DefineMockDataOptions, HeaderStream, MockData, SSEMessage, createDefineMock, createSSEStream, defineMock, defineMockData } from "./helper.js";
|
|
3
|
-
import { a as processRawData, c as Logger, i as processMockData, l as createLogger, n as CreateMockMiddlewareOptions, o as sortByValidator, r as createMockMiddleware, s as mockDevServerPlugin, t as mockWebSocket, u as logLevels } from "./server-
|
|
3
|
+
import { a as processRawData, c as Logger, i as processMockData, l as createLogger, n as CreateMockMiddlewareOptions, o as sortByValidator, r as createMockMiddleware, s as mockDevServerPlugin, t as mockWebSocket, u as logLevels } from "./server-a8HL1JRZ.js";
|
|
4
4
|
export { BodyParserOptions, CookiesOption, CreateMockMiddlewareOptions, DefineMockDataOptions, ExtraRequest, type FormidableFile, GetCookieOption, HeaderStream, Headers, LogLevel, LogType, Logger, Method, MockData, MockErrorConfig, type MockHttpItem, MockMatchPriority, MockMatchSpecialPriority, type MockOptions, type MockRequest, MockResponse, type MockServerPluginOptions, type MockWebsocketItem, RecordOptions, RecordedMeta, RecordedReq, RecordedRequest, RecordedRes, ResolvedRecordOptions, ResponseBody, SSEMessage, ServerBuildOption, SetCookieOption, WebSocketSetupContext, createDefineMock, createLogger, createMockMiddleware, createSSEStream, defineMock, defineMockData, logLevels, mockDevServerPlugin, mockWebSocket, processMockData, processRawData, sortByValidator };
|
package/dist/index.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import{a as e,c as t,d as n,f as r,i,l as a,n as o,o as s,p as c,r as l,s as u,t as d,u as f}from"./server-BJ-Z5r-p.js";import{createDefineMock as p,createSSEStream as m,defineMock as h,defineMockData as g}from"./helper.js";import _ from"node:process";import{attemptAsync as v,isArray as ee,isBoolean as te,promiseParallel as y,toArray as b,uniq as ne}from"@pengzhanbo/utils";import x from"node:path";import{pathToFileURL as S}from"node:url";import C from"node:fs/promises";import w from"json5";import{createHash as T}from"node:crypto";import E,{promises as D}from"node:fs";import O from"node:events";import{watch as k}from"chokidar";import{getPackageInfoSync as A,loadPackageJSON as j,loadPackageJSONSync as M}from"local-pkg";import{glob as N}from"tinyglobby";import P from"ansis";import re from"is-core-module";function ie(e){let t={},n=_.env.NODE_ENV||e.mode;Object.assign(t,{"process.env.NODE_ENV":JSON.stringify(n),"global.process.env.NODE_ENV":JSON.stringify(n),"globalThis.process.env.NODE_ENV":JSON.stringify(n)});let r={},i={};for(let t in e.define){let n=e.define[t],a=t.startsWith(`import.meta.env.`);typeof n==`string`?oe(n)&&(r[t]=n,a&&(i[t.slice(16)]=n)):(r[t]=F(n),a&&(i[t.slice(16)]=n))}let a={},o={},s={};a[`import.meta.hot`]=`undefined`;for(let t in e.env){let n=JSON.stringify(e.env[t]);a[`import.meta.env.${t}`]=n,o[t]=n}s[`import.meta.env`]=`undefined`;let c={...t,...a,...r,...s};return`import.meta.env`in c&&(c[`import.meta.env`]=ae({...o,...i})),c}function ae(e){let t=`{`,n=Object.keys(e);for(let r=0;r<n.length;r++){let i=n[r],a=e[i];t+=`${JSON.stringify(i)}: ${F(a)}`,r!==n.length-1&&(t+=`, `)}return`${t}}`}function F(e){return e===void 0?`undefined`:typeof e==`string`?e:JSON.stringify(e)}function oe(e){try{return JSON.parse(e),!0}catch{return!1}}const se={name:`externalize-deps`,setup(e){e.onResolve({filter:/.*/},({path:e})=>{if(e[0]!==`.`&&!x.isAbsolute(e))return{external:!0}})}},ce={name:`json5-loader`,setup(e){e.onLoad({filter:/\.json5$/},async({path:e})=>{let t=await C.readFile(e,`utf-8`);return{contents:`export default ${JSON.stringify(w.parse(t))}`,loader:`js`}})}},I={name:`json-loader`,setup(e){e.onLoad({filter:/\.json$/},async({path:e})=>({contents:`export default ${await C.readFile(e,`utf-8`)}`,loader:`js`}))}},L={name:`rename-plugin`,setup(e){e.onResolve({filter:/.*/},({path:e})=>e===`vite-plugin-mock-dev-server`?{path:`vite-plugin-mock-dev-server/helper`,external:!0}:null)}};function R(e){return{name:`alias-plugin`,setup(t){t.onResolve({filter:/.*/},async({path:n})=>{let r=e.find(({find:e})=>z(e,n));if(!r)return null;let{find:i,replacement:a}=r;return{path:(await t.resolve(n.replace(i,a),{kind:`import-statement`,resolveDir:a,namespace:`file`})).path,external:!1}})}}}function z(e,t){return e instanceof RegExp?e.test(t):t.length<e.length?!1:t===e?!0:t.startsWith(`${e}/`)}let B=null;async function V(){return B||=(await import(`esbuild`)).build,B}async function H(e,{isESM:t=!0,define:r,alias:i,cwd:a=_.cwd()}){let o=x.resolve(a,e),s=x.basename(e),c=x.dirname(o);try{let l=await(await V())({entryPoints:[e],outfile:`out.js`,write:!1,target:[`node20`],platform:`node`,bundle:!0,metafile:!0,format:t?`esm`:`cjs`,define:{...r,__dirname:JSON.stringify(c),__filename:JSON.stringify(s),...t?{}:{"import.meta.url":JSON.stringify(S(o))}},plugins:[R(i),L,se,I,ce],absWorkingDir:a}),u=new Set,d=l.metafile?.inputs||{};return Object.keys(d).forEach(e=>d[e].imports.forEach(e=>u.add(n(e.path)))),{code:l.outputFiles[0].text,deps:Array.from(u)}}catch(e){console.error(e)}return{code:``,deps:[]}}async function U({filepath:e,code:t,isESM:n,cwd:r}){e=x.resolve(r,e);let i=n?`.mjs`:`.cjs`,a=`${e}.${G(t)}${i}`;await D.writeFile(a,t,`utf8`);let[,o]=await v(W,String(S(a)));return await v(D.unlink,a),o}async function W(e){let t=await import(e);return t.default||t}function G(e){return T(`md5`).update(e).digest(`hex`)}const le={name:`vite-mock:rename-plugin`,resolveId(e){if(e===`vite-plugin-mock-dev-server`)return{id:`vite-plugin-mock-dev-server/helper`,external:!0}}},ue={name:`vite-mock:json5-plugin`,transform:{filter:{id:/\.json5$/},handler:e=>({code:`export default ${w.stringify(w.parse(e))}`})}};let K=null;async function de(){return K||={build:(await import(`rolldown`)).build,aliasPlugin:(await import(`rolldown/experimental`)).viteAliasPlugin},K}async function fe(e,{isESM:t=!0,define:r,alias:i,cwd:a=_.cwd()}){let o=x.resolve(a,e),s=x.basename(e),c=x.dirname(o),l=e=>!!i.find(({find:t})=>z(t,e));try{let{build:u,aliasPlugin:d}=await de(),f=await u({input:e,write:!1,cwd:a,output:{format:t?`esm`:`cjs`,sourcemap:!1,file:`out.js`},platform:`node`,transform:{define:{...r,__dirname:JSON.stringify(c),__filename:JSON.stringify(s),...t?{}:{"import.meta.url":JSON.stringify(S(o))}}},external(e){if(l(e))return!1;if(e[0]!==`.`&&!x.isAbsolute(e)&&e!==`vite-plugin-mock-dev-server`)return!0},plugins:[d({entries:i}),le,ue],onLog(e,t,n){t.code===`PLUGIN_TIMINGS`&&t.message.includes(`vite-mock`)||n(e,t)}});return{code:f.output[0].code,deps:f.output[0].moduleIds.filter(e=>!e.endsWith(s)).map(e=>n(x.relative(a,e)))}}catch(e){console.error(e)}return{code:``,deps:[]}}let q;async function J(e,t){if(q??=await r(`rolldown`)?`rolldown`:await r(`esbuild`)?`esbuild`:`none`,q===`rolldown`)return fe(e,t);if(q===`esbuild`)return H(e,t);throw Error(`rolldown or esbuild not found`)}async function pe(e,t){let n=!1;n=/\.m[jt]s$/.test(e)?!0:/\.c[jt]s$/.test(e)?!1:t.isESM||!1;let{code:r,deps:i}=await J(e,{...t,isESM:n});return{data:await U({filepath:e,code:r,isESM:n,cwd:t.cwd||_.cwd()})||{},deps:i}}var me=class extends O{moduleCache=new Map;moduleDeps=new Map;cwd;mockWatcher;depsWatcher;isESM=!1;_mockData={};options;constructor(e){super(),this.options=e,this.cwd=e.cwd||_.cwd();try{let e=M(this.cwd);this.isESM=e?.type===`module`}catch{}}get mockData(){return this._mockData}run(e){let{include:t,exclude:r}=this.options,{pattern:i,ignore:a,isMatch:o}=c(t,r);if(N(i,{ignore:a,cwd:x.join(this.cwd,this.options.dir)}).then(e=>e.map(e=>()=>this.load(n(x.join(this.options.dir,e))))).then(e=>y(e,64)).then(()=>this.updateMockData()).catch(console.error),!e)return;this.watchMockEntry(o),this.watchDeps();let s=null;this.on(`mock:update`,async e=>{o(e)&&(await this.load(e),s&&clearImmediate(s),s=setImmediate(()=>{this.updateMockData(),this.emit(`mock:update-end`,n(e)),s=null}))}),this.on(`mock:unlink`,async e=>{o(e)&&(e=n(x.join(this.options.dir,e)),this.moduleCache.delete(e),this.updateMockData(),this.emit(`mock:update-end`,e))})}close(){this.mockWatcher?.close(),this.depsWatcher?.close()}async load(e){if(e)try{let{define:n,alias:r}=this.options,{data:i,deps:a}=await pe(e,{cwd:this.cwd,isESM:this.isESM,define:n,alias:r});this.moduleCache.set(e,t(i,e)),this.updateModuleDeps(e,a)}catch(e){console.error(e)}}updateMockData(){this._mockData=u(this.moduleCache)}updateModuleDeps(e,t){for(let n of t)this.moduleDeps.has(n)||this.moduleDeps.set(n,new Set),this.moduleDeps.get(n).add(e);this.emit(`update:deps`)}watchMockEntry(e){let t=this.mockWatcher=k(this.options.dir,{ignoreInitial:!0,cwd:this.cwd,ignored:(t,r)=>t.includes(`node_modules`)?!0:!!r?.isFile()&&!e(n(t))});t.on(`add`,async e=>{e=n(e),this.emit(`mock:update`,e),f(`watcher:add`,e)}),t.on(`change`,async e=>{e=n(e),this.emit(`mock:update`,e),f(`watcher:change`,e)}),t.on(`unlink`,async e=>{e=n(e),this.emit(`mock:unlink`,e),f(`watcher:unlink`,e)})}watchDeps(){let e=[...this.moduleDeps.keys()],t=this.depsWatcher=k([...e],{ignoreInitial:!0,cwd:this.cwd});t.on(`change`,e=>{e=n(e),this.moduleDeps.get(e)?.forEach(e=>this.emit(`mock:update`,e))}),t.on(`unlink`,e=>{e=n(e),this.moduleDeps.delete(e)}),this.on(`update:deps`,()=>{let n=[...this.moduleDeps.keys()],r=n.filter(t=>!e.includes(t));e=n,r.length>0&&t.add(r)})}};function Y(e,t,n){let r=new me(e);r.run(!!t),r.on(`mock:update-end`,()=>{e.reload&&n?.send({type:`full-reload`})}),t?.on(`close`,()=>r.close()),l(r,t,e);let a=[];return a.push(i(r,e)),a}function X({prefix:e=[],wsPrefix:t=[],cwd:n,dir:r=`mock`,include:i=[`**/*.mock.{js,ts,cjs,mjs,json,json5}`],exclude:a=[],reload:o=!1,log:s=`info`,cors:c=!0,formidableOptions:l={},build:u=!1,cookiesOptions:f={},bodyParserOptions:p={},priority:m={},activeScene:h=[],record:g=!1,replay:v},y){let x=n||_.cwd(),S=d(`vite:mock`,te(s)?s?`info`:`error`:s),{httpProxies:C}=he(y.server.proxy||{}),w=ne([...b(e),...C]),T=b(t);!w.length&&!T.length&&S.warn(`No proxy was configured, mock server will not work. See ${P.cyan(`https://vite-plugin-mock-dev-server.netlify.app/guide/usage`)}`);let E=c===!1?!1:y.server.cors!==!1,D={};E&&y.server.cors!==!1&&(D={...D,...typeof y.server.cors==`boolean`?{}:y.server.cors}),E&&c!==!1&&(D={...D,...typeof c==`boolean`?{}:c});let O=[],k=y.resolve.alias||[];ee(k)?O.push(...k):Object.entries(k).forEach(([e,t])=>{O.push({find:e,replacement:t})});let A=Z(x,r,g);return{enabled:!0,cwd:x,dir:r,include:i,exclude:a,context:y.root,reload:o,cors:E?D:!1,cookiesOptions:f,log:s,formidableOptions:{multiples:!0,...l},bodyParserOptions:p,priority:m,build:u?{serverPort:8080,dist:`mockServer`,log:`error`,includeRecord:v??A.enabled??!1,...typeof u==`object`?u:{}}:!1,proxies:w,wsProxies:T,activeScene:b(h),logger:S,alias:O,define:ie(y),record:A,replay:v??A.enabled??!1}}function he(e={}){let t=[],n=[];return Object.keys(e).forEach(r=>{let i=e[r];typeof i==`string`||!i.ws&&!i.target?.toString().startsWith(`ws:`)&&!i.target?.toString().startsWith(`wss:`)?t.push(r):n.push(r)}),{httpProxies:t,wsProxies:n}}function Z(e,t,n){let r=typeof n==`boolean`?{enabled:n}:n,i=r?.expires??0;return{enabled:r?.enabled??!1,cwd:e,dir:x.join(t,r?.dir||`.recordings`),overwrite:r?.overwrite??!0,status:b(r?.status).map(Number),expires:i===0?2**53-1:i*1e3,gitignore:r?.gitignore??!0,filter:r?.filter||(()=>!0)}}async function ge(e,t,r,i){let{pattern:a,ignore:o}=c(r,i),s=await N(a,{ignore:o,cwd:x.join(e,t)}),l=``,u=[];return s.forEach((r,i)=>{let a=n(x.join(e,t,r));l+=`import * as m${i} from '${a}';\n`,u.push(`[m${i}, '${n(x.join(t,r))}']`)}),`import { processMockData, processRawData } from 'vite-plugin-mock-dev-server/server';
|
|
1
|
+
import{a as e,c as t,d as n,f as r,i,l as a,m as o,n as s,o as c,p as l,r as u,s as d,t as f,u as p}from"./server-B4Hh46_a.js";import{createDefineMock as m,createSSEStream as h,defineMock as g,defineMockData as _}from"./helper.js";import v from"node:process";import{attemptAsync as y,isArray as b,isBoolean as ee,promiseParallel as x,toArray as S,uniq as te}from"@pengzhanbo/utils";import C from"node:path";import{pathToFileURL as w}from"node:url";import T from"ansis";import E from"node:fs/promises";import D from"json5";import O,{promises as k}from"node:fs";import A from"node:events";import{watch as j}from"chokidar";import{getPackageInfoSync as M,loadPackageJSON as N,loadPackageJSONSync as P}from"local-pkg";import{glob as F}from"tinyglobby";import ne from"is-core-module";function re(e){let t={},n=v.env.NODE_ENV||e.mode;Object.assign(t,{"process.env.NODE_ENV":JSON.stringify(n),"global.process.env.NODE_ENV":JSON.stringify(n),"globalThis.process.env.NODE_ENV":JSON.stringify(n)});let r={},i={};for(let t in e.define){let n=e.define[t],a=t.startsWith(`import.meta.env.`);typeof n==`string`?ae(n)&&(r[t]=n,a&&(i[t.slice(16)]=n)):(r[t]=I(n),a&&(i[t.slice(16)]=n))}let a={},o={},s={};a[`import.meta.hot`]=`undefined`;for(let t in e.env){let n=JSON.stringify(e.env[t]);a[`import.meta.env.${t}`]=n,o[t]=n}s[`import.meta.env`]=`undefined`;let c={...t,...a,...r,...s};return`import.meta.env`in c&&(c[`import.meta.env`]=ie({...o,...i})),c}function ie(e){let t=`{`,n=Object.keys(e);for(let r=0;r<n.length;r++){let i=n[r],a=e[i];t+=`${JSON.stringify(i)}: ${I(a)}`,r!==n.length-1&&(t+=`, `)}return`${t}}`}function I(e){return e===void 0?`undefined`:typeof e==`string`?e:JSON.stringify(e)}function ae(e){try{return JSON.parse(e),!0}catch{return!1}}const oe={name:`externalize-deps`,setup(e){e.onResolve({filter:/.*/},({path:e})=>{if(e[0]!==`.`&&!C.isAbsolute(e))return{external:!0}})}},se={name:`json5-loader`,setup(e){e.onLoad({filter:/\.json5$/},async({path:e})=>{let t=await E.readFile(e,`utf-8`);return{contents:`export default ${JSON.stringify(D.parse(t))}`,loader:`js`}})}},ce={name:`json-loader`,setup(e){e.onLoad({filter:/\.json$/},async({path:e})=>({contents:`export default ${await E.readFile(e,`utf-8`)}`,loader:`js`}))}},L={name:`rename-plugin`,setup(e){e.onResolve({filter:/.*/},({path:e})=>e===`vite-plugin-mock-dev-server`?{path:`vite-plugin-mock-dev-server/helper`,external:!0}:null)}};function R(e){return{name:`alias-plugin`,setup(t){t.onResolve({filter:/.*/},async({path:n})=>{let r=e.find(({find:e})=>z(e,n));if(!r)return null;let{find:i,replacement:a}=r;return{path:(await t.resolve(n.replace(i,a),{kind:`import-statement`,resolveDir:a,namespace:`file`})).path,external:!1}})}}}function z(e,t){return e instanceof RegExp?e.test(t):t.length<e.length?!1:t===e?!0:t.startsWith(`${e}/`)}let B=null;async function V(){return B||=(await import(`esbuild`)).build,B}async function H(e,{isESM:t=!0,define:n,alias:i,cwd:a=v.cwd(),logger:o}){let s=C.resolve(a,e),c=C.basename(e),l=C.dirname(s);try{let o=await(await V())({entryPoints:[e],outfile:`out.js`,write:!1,target:[`node20`],platform:`node`,bundle:!0,metafile:!0,format:t?`esm`:`cjs`,define:{...n,__dirname:JSON.stringify(l),__filename:JSON.stringify(c),...t?{}:{"import.meta.url":JSON.stringify(w(s))}},plugins:[R(i),L,oe,ce,se],absWorkingDir:a}),u=new Set,d=o.metafile?.inputs||{};return Object.keys(d).forEach(e=>d[e].imports.forEach(e=>u.add(r(e.path)))),{code:o.outputFiles[0].text,deps:Array.from(u)}}catch(e){o.error(`Failed to transform ${T.yellow.underline(s)}`),console.error(e)}return{code:``,deps:[]}}const U=new Set;async function W({filepath:e,code:t,isESM:r,cwd:i}){e=C.resolve(i,e);let a=r?`.mjs`:`.cjs`,o=`${e}.${n(t)}${a}`;await k.writeFile(o,t,`utf8`),U.add(o);let[,s]=await y(G,String(w(o)));return await y(le,o),s}async function G(e){let t=await import(e);return t.default||t}async function le(e){await k.unlink(e),U.delete(e)}async function ue(){for(let e of U)O.existsSync(e)&&await y(k.unlink,e)}v.on(`exit`,ue);const de={name:`vite-mock:rename-plugin`,resolveId(e){if(e===`vite-plugin-mock-dev-server`)return{id:`vite-plugin-mock-dev-server/helper`,external:!0}}},fe={name:`vite-mock:json5-plugin`,transform:{filter:{id:/\.json5$/},handler:e=>({code:`export default ${D.stringify(D.parse(e))}`})}};let K=null;async function pe(){return K||={build:(await import(`rolldown`)).build,aliasPlugin:(await import(`rolldown/experimental`)).viteAliasPlugin},K}async function me(e,{isESM:t=!0,define:n,alias:i,cwd:a=v.cwd(),logger:o}){let s=C.resolve(a,e),c=C.basename(e),l=C.dirname(s),u=e=>!!i.find(({find:t})=>z(t,e));try{let{build:o,aliasPlugin:d}=await pe(),f=await o({input:e,write:!1,cwd:a,output:{format:t?`esm`:`cjs`,sourcemap:!1,file:`out.js`},platform:`node`,transform:{define:{...n,__dirname:JSON.stringify(l),__filename:JSON.stringify(c),...t?{}:{"import.meta.url":JSON.stringify(w(s))}}},external(e){if(u(e))return!1;if(e[0]!==`.`&&!C.isAbsolute(e)&&e!==`vite-plugin-mock-dev-server`)return!0},plugins:[d({entries:i}),de,fe],onLog(e,t,n){t.code===`PLUGIN_TIMINGS`&&t.message.includes(`vite-mock`)||n(e,t)}});return{code:f.output[0].code,deps:f.output[0].moduleIds.filter(e=>!e.endsWith(c)).map(e=>r(C.relative(a,e)))}}catch(e){o.error(`Failed to transform ${T.yellow.underline(s)}`),console.error(e)}return{code:``,deps:[]}}let q;async function J(e,t){if(q??=await l(`rolldown`)?`rolldown`:await l(`esbuild`)?`esbuild`:`none`,q===`rolldown`)return me(e,t);if(q===`esbuild`)return H(e,t);throw Error(`rolldown or esbuild not found`)}async function he(e,t){let n=!1;n=/\.m[jt]s$/.test(e)?!0:/\.c[jt]s$/.test(e)?!1:t.isESM||!1;let{code:r,deps:i}=await J(e,{...t,isESM:n});return{data:await W({filepath:e,code:r,isESM:n,cwd:t.cwd||v.cwd()})||{},deps:i}}var ge=class extends A{moduleCache=new Map;moduleDeps=new Map;cwd;mockWatcher;depsWatcher;isESM=!1;_mockData={};options;constructor(e){super(),this.options=e,this.cwd=e.cwd||v.cwd();try{let e=P(this.cwd);this.isESM=e?.type===`module`}catch{}}get mockData(){return this._mockData}run(e){let{include:t,exclude:n}=this.options,{pattern:i,ignore:a,isMatch:s}=o(t,n);if(F(i,{ignore:a,cwd:r(C.join(this.cwd,this.options.dir))}).then(e=>e.map(e=>()=>this.load(r(C.join(this.options.dir,e))))).then(e=>x(e,64)).then(()=>this.updateMockData()).catch(this.options.logger.error),!e)return;this.watchMockEntry(s),this.watchDeps();let c=null;this.on(`mock:update`,async e=>{s(e)&&(await this.load(e),c&&clearImmediate(c),c=setImmediate(()=>{this.updateMockData(),this.emit(`mock:update-end`,r(e)),c=null}))}),this.on(`mock:unlink`,async e=>{s(e)&&(e=r(C.join(this.options.dir,e)),this.moduleCache.delete(e),this.updateMockData(),this.emit(`mock:update-end`,e))})}close(){this.mockWatcher?.close(),this.depsWatcher?.close()}async load(e){if(e)try{let{define:n,alias:r,logger:i}=this.options,{data:a,deps:o}=await he(e,{cwd:this.cwd,isESM:this.isESM,define:n,alias:r,logger:i});this.moduleCache.set(e,t(a,e)),this.updateModuleDeps(e,o)}catch(e){console.error(e)}}updateMockData(){this._mockData=d(this.moduleCache)}updateModuleDeps(e,t){for(let n of t)this.moduleDeps.has(n)||this.moduleDeps.set(n,new Set),this.moduleDeps.get(n).add(e);this.emit(`update:deps`)}watchMockEntry(e){let t=this.mockWatcher=j(this.options.dir,{ignoreInitial:!0,cwd:this.cwd,ignored:(t,n)=>t.includes(`node_modules`)?!0:!!n?.isFile()&&!e(r(t))});t.on(`add`,async e=>{e=r(e),this.emit(`mock:update`,e),p(`watcher:add`,e)}),t.on(`change`,async e=>{e=r(e),this.emit(`mock:update`,e),p(`watcher:change`,e)}),t.on(`unlink`,async e=>{e=r(e),this.emit(`mock:unlink`,e),p(`watcher:unlink`,e)})}watchDeps(){let e=[...this.moduleDeps.keys()],t=this.depsWatcher=j([...e],{ignoreInitial:!0,cwd:this.cwd});t.on(`change`,e=>{e=r(e),this.moduleDeps.get(e)?.forEach(e=>this.emit(`mock:update`,e))}),t.on(`unlink`,e=>{e=r(e),this.moduleDeps.delete(e)}),this.on(`update:deps`,()=>{let n=[...this.moduleDeps.keys()],r=n.filter(t=>!e.includes(t));e=n,r.length>0&&t.add(r)})}};function Y(e,t,n){let r=new ge(e);r.run(!!t),r.on(`mock:update-end`,()=>{e.reload&&n?.send({type:`full-reload`})}),t?.on(`close`,()=>r.close()),u(r,t,e);let a=[];return a.push(i(r,e)),a}function X({prefix:e=[],wsPrefix:t=[],cwd:n,dir:r=`mock`,include:i=[`**/*.mock.{js,ts,cjs,mjs,json,json5}`],exclude:a=[],reload:o=!1,log:s=`info`,cors:c=!0,formidableOptions:l={},build:u=!1,cookiesOptions:d={},bodyParserOptions:p={},priority:m={},activeScene:h=[],record:g=!1,replay:_},y){let x=n||v.cwd(),C=f(`vite:mock`,ee(s)?s?`info`:`error`:s),{httpProxies:w}=_e(y.server.proxy||{}),E=te([...S(e),...w]),D=S(t);!E.length&&!D.length&&C.warn(`No proxy was configured, mock server will not work. See ${T.cyan(`https://vite-plugin-mock-dev-server.netlify.app/guide/usage`)}`);let O=c===!1?!1:y.server.cors!==!1,k={};O&&y.server.cors!==!1&&(k={...k,...typeof y.server.cors==`boolean`?{}:y.server.cors}),O&&c!==!1&&(k={...k,...typeof c==`boolean`?{}:c});let A=[],j=y.resolve.alias||[];b(j)?A.push(...j):Object.entries(j).forEach(([e,t])=>{A.push({find:e,replacement:t})});let M=Z(x,r,g);return{enabled:!0,cwd:x,dir:r,include:i,exclude:a,context:y.root,reload:o,cors:O?k:!1,cookiesOptions:d,log:s,formidableOptions:{multiples:!0,...l},bodyParserOptions:p,priority:m,build:u?{serverPort:8080,dist:`mockServer`,log:`error`,includeRecord:_??M.enabled??!1,...typeof u==`object`?u:{}}:!1,proxies:E,wsProxies:D,activeScene:S(h),logger:C,alias:A,define:re(y),record:M,replay:_??M.enabled??!1}}function _e(e={}){let t=[],n=[];return Object.keys(e).forEach(r=>{let i=e[r];typeof i==`string`||!i.ws&&!i.target?.toString().startsWith(`ws:`)&&!i.target?.toString().startsWith(`wss:`)?t.push(r):n.push(r)}),{httpProxies:t,wsProxies:n}}function Z(e,t,n){let r=typeof n==`boolean`?{enabled:n}:n,i=r?.expires??0;return{enabled:r?.enabled??!1,cwd:e,dir:C.join(t,r?.dir||`.recordings`),overwrite:r?.overwrite??!0,status:S(r?.status).map(Number),expires:i===0?2**53-1:i*1e3,gitignore:r?.gitignore??!0,filter:r?.filter||(()=>!0)}}async function ve(e,t,n,i){let{pattern:a,ignore:s}=o(n,i),c=await F(a,{ignore:s,cwd:C.join(e,t)}),l=``,u=[];return c.forEach((n,i)=>{let a=r(C.join(e,t,n));l+=`import * as m${i} from '${a}';\n`,u.push(`[m${i}, '${r(C.join(t,n))}']`)}),`import { processMockData, processRawData } from 'vite-plugin-mock-dev-server/server';
|
|
2
2
|
${l}
|
|
3
3
|
const exporters = [\n ${u.join(`,
|
|
4
4
|
`)}\n];
|
|
5
5
|
const mockList = exporters.map(([mod, filepath]) => processRawData(mod.default || mod, filepath));
|
|
6
|
-
export default processMockData(mockList);`}var Q=`vite-plugin-mock-dev-server
|
|
6
|
+
export default processMockData(mockList);`}var Q=`vite-plugin-mock-dev-server`,ye=`2.2.1`;function be(e,t){let n=new Set,r=[Q,`connect`,`cors`],i=e=>t.find(({find:t})=>z(t,e));return e.forEach(e=>{let t=$(e);t.startsWith(`<define:`)||i(t)||ne(t)||t[0]===`/`||t.startsWith(`./`)||t.startsWith(`../`)||r.includes(t)||n.add(t)}),Array.from(n)}function $(e){let[t,n]=e.split(`/`);return t[0]===`@`?`${t}/${n}`:t}function xe(e,t){let{dependencies:n={},devDependencies:r={}}=e,i={...n,...r},a={name:`mock-server`,type:`module`,scripts:{start:`node index.js`},dependencies:{connect:`^3.7.0`,[Q]:`^${ye}`,cors:`^2.8.5`},pnpm:{peerDependencyRules:{ignoreMissing:[`vite`]}}},o=[`catalog:`,`file:`,`workspace:`];for(let e of t){let t=i[e];if(!t||o.some(e=>t.startsWith(e))){let t=M(e);a.dependencies[e]=t?.version?`^${t.version}`:`latest`}else a.dependencies[e]=`latest`}return JSON.stringify(a,null,2)}function Se({proxies:e,wsProxies:t,cookiesOptions:n,bodyParserOptions:r,priority:i,build:a,cors:o,record:s,replay:c}){let{serverPort:l,log:u}=a;return`import { createServer } from 'node:http';
|
|
7
7
|
import process from 'node:process';
|
|
8
8
|
import connect from 'connect';
|
|
9
9
|
import { createMockMiddleware, createLogger, mockWebSocket } from 'vite-plugin-mock-dev-server/server';
|
|
@@ -45,4 +45,4 @@ app.use(createMockMiddleware(compiler, {
|
|
|
45
45
|
server.listen(${l});
|
|
46
46
|
|
|
47
47
|
console.log('listen: http://localhost:${l}');
|
|
48
|
-
`}async function
|
|
48
|
+
`}async function Ce(e,t){let n=S(t.include),r=S(t.exclude),i=t.cwd||v.cwd(),a=t.dir,o=t.build,s=await N(t.context)||{},c=o.dist,l=await ve(i,a,n,r),u=C.join(i,`mock-data-${Date.now()}.js`);await E.writeFile(u,l,`utf-8`);let{code:d,deps:f}=await J(u,t),p=be(f,t.alias);await E.unlink(u);let m=[{filename:C.join(c,`mock-data.js`),source:d},{filename:C.join(c,`index.js`),source:Se(t)},{filename:C.join(c,`package.json`),source:xe(s,p)}];if(t.record.enabled&&o.includeRecord){let e=await F(C.join(t.record.dir,`**/*.json`),{cwd:t.cwd,dot:!0});for(let n of e)m.push({filename:C.join(c,n),source:await E.readFile(C.join(t.cwd,n),`utf-8`)})}try{if(C.isAbsolute(c)){for(let{filename:e}of m)O.existsSync(e)&&await E.rm(e);t.logger.info(`${T.green(`✓`)} generate mock server in ${T.cyan(c)}`);for(let{filename:e,source:n}of m){await E.mkdir(C.dirname(e),{recursive:!0}),await E.writeFile(e,n,`utf-8`);let r=(n.length/1024).toFixed(2),i=C.relative(c,e),a=i.length<30?` `.repeat(30-i.length):``;t.logger.info(` ${T.green(i)}${a}${T.bold.dim(`${r} kB`)}`)}}else for(let{filename:t,source:n}of m)e.emitFile({type:`asset`,fileName:t,source:n})}catch(e){t.logger.error(`Failed to generate mock server`),console.error(e)}}function we(e={}){if(e.enabled===!1)return[];let t=[Ee(e)];return e.build&&t.push(Te(e)),t}function Te(e){let t={},n;return{name:`vite-plugin-mock-dev-server-generator`,enforce:`post`,apply:`build`,configResolved(r){t=r,n=X(e,r),r.logger.warn(``)},async buildEnd(e){e||t.command!==`build`||await Ce(this,n)}}}function Ee(t){let n;return{name:`vite-plugin-mock-dev-server`,enforce:`pre`,apply:`serve`,config(n){let r=S(t.wsPrefix);if(r.length&&n.server?.proxy){let e={};Object.keys(n.server.proxy).forEach(t=>{r.includes(t)||(e[t]=n.server.proxy[t])}),n.server.proxy=e}e(n);let{cwd:i,dir:a}=t,o=Z(i||v.cwd(),a||`mock`,t.record);o.enabled&&new c(o).setup(n)},configResolved(e){n=X(t,e),e.logger.warn(``)},configureServer({middlewares:e,httpServer:t,ws:r}){Y(n,t,r).forEach(t=>e.use(t))},configurePreviewServer({middlewares:e,httpServer:t}){Y(n,t).forEach(t=>e.use(t))}}}export{m as createDefineMock,f as createLogger,i as createMockMiddleware,h as createSSEStream,g as defineMock,_ as defineMockData,s as logLevels,we as mockDevServerPlugin,u as mockWebSocket,d as processMockData,t as processRawData,a as sortByValidator};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{LRUCache as e,attempt as t,attemptAsync as n,deepEqual as r,findFirstThen as i,hasOwn as a,isArray as o,isBoolean as s,isEmptyObject as c,isFunction as l,isNil as u,isPlainObject as d,isPrimitive as f,isString as p,kebabCase as m,objectKeys as h,partition as g,random as _,remove as v,sleep as y,sortBy as b,timestamp as x,toArray as S,uniq as C}from"@pengzhanbo/utils";import w from"picomatch";import{match as T,parse as E,pathToRegexp as D}from"path-to-regexp";import{Buffer as O}from"node:buffer";import k,{createHash as ee}from"node:crypto";import A from"node:os";import j from"node:path";import te from"debug";import{parse as ne}from"node:querystring";import M from"ansis";import N,{promises as P}from"node:fs";import F from"cors";import I from"co-body";import L from"formidable";import R from"node:http";import z from"node:zlib";import re from"http-status";import*as ie from"mime-types";import{WebSocketServer as ae}from"ws";function oe(e,t){let n=[],r=[`**/node_modules/**`,...S(t)];return S(e).forEach(e=>{e[0]===`!`?r.push(e.slice(1)):n.push(e)}),{pattern:n,ignore:r,isMatch:w(n,{ignore:r})}}const se=new e({maxSize:100});function ce(e,t){if(e[0]===`^`){let n=se.get(e);return n||se.set(e,n=new RegExp(e)),n.test(t)}return t.startsWith(e)}function le(e){return typeof e==`object`&&!!e&&typeof e.pipe==`function`}function ue(e){return le(e)&&e.readable!==!1&&typeof e._read==`function`&&typeof e._readableState==`object`}const B={};async function de(e){if(a(B,e))return B[e];try{return import.meta.resolve?B[e]=!!import.meta.resolve(e):(await import(e),B[e]=!0),B[e]}catch{}return B[e]=!1,!1}function fe(e){return[`text`,`json`,`xml`].some(t=>e.includes(t))}function V(e,t){if(!t)return!0;for(let n in t)if(!pe(e[n],t[n]))return!1;return!0}function pe(e,t){if(o(e)&&o(t)){let n=new Set;return t.every(t=>e.some((e,r)=>{if(n.has(r))return!1;let i=pe(e,t);return i&&n.add(r),i}))}return d(e)&&d(t)?V(e,t):Object.is(e,t)}const me=new Map;function H(e,t){let n=me.get(e);return n||(n=D(e).regexp,me.set(e,n)),n.test(t)}function he(e,t){if(!t)return!0;let n=S(t);return e.length===0&&n.length>0?!1:n.length===0?!0:n.some(t=>e.includes(t))}const ge=te(`vite:mock-dev-server`),_e=/\\/g,ve=A.platform()===`win32`;function ye(e){return e.replace(_e,`/`)}function be(e){return j.posix.normalize(ve?ye(e):e)}function xe(e){return e=f(e)?String(e):JSON.stringify(e),ee(`md5`).update(O.from(e)).digest(`hex`)}function U(e){try{let t=new URL(e,`http://example.com`);return{pathname:decodeURIComponent(t.pathname),query:ne(t.search.replace(/^\?/,``))}}catch{return console.error(`${M.red(`[vite:mock]`)} Failed to parse URL, input: ${M.yellow.underline(e)}`),{pathname:``,query:{}}}}function Se(e,t){let n;return o(e)?n=e.map(e=>({...e,__filepath__:t})):`url`in e?n={...e,__filepath__:t}:(n=[],h(e).forEach(r=>{let i=e[r];o(i)?n.push(...i.map(e=>({...e,__filepath__:t}))):n.push({...i,__filepath__:t})})),n}function Ce(e){let t=[];for(let[,n]of e.entries())n&&t.push(...S(n));let n={};return t.filter(e=>d(e)&&e.enabled!==!1&&e.url).forEach(e=>{let{pathname:t,query:r}=U(e.url),i=n[t]??=[],a={...e,url:t};if(a.ws!==!0){let e=a.validator;c(r)||(l(e)?a.validator=function(t){return V(t.query,r)&&e(t)}:e?(a.validator={...e},a.validator.query=a.validator.query?{...r,...a.validator.query}:r):a.validator={query:r})}i.push(a)}),h(n).forEach(e=>{n[e]=we(n[e])}),n}function we(e){return b(e,e=>{if(e.ws===!0)return 0;let t=S(e.scene).length>0?0:1,{validator:n}=e;return!n||c(n)?2+t:l(n)?0+t:1/Object.keys(n).reduce((e,t)=>e+Te(n[t]),0)+t})}function Te(e){return e?h(e).length:0}function Ee(e){let t=e?F(e):void 0;return t?(e,n)=>new Promise((r,i)=>t(e,n,e=>{e?i(e):r()})):void 0}async function De(e,t,n,r={}){let i=e.method.toUpperCase();if([`HEAD`,`OPTIONS`].includes(i))return;let a=e.headers[`content-type`]?.toLocaleLowerCase()||``,{limit:o,formLimit:s,jsonLimit:c,textLimit:l,...u}=r;try{if(a.startsWith(`application/json`))return await I.json(e,{limit:c||o,...u});if(a.startsWith(`application/x-www-form-urlencoded`))return await I.form(e,{limit:s||o,...u});if(a.startsWith(`text/plain`))return await I.text(e,{limit:l||o,...u});if(a.startsWith(`multipart/form-data`))return await ke(e,n)}catch(e){t.error(e)}}const Oe={keepExtensions:!0,filename(e,t,n){return n?.originalFilename||`${e}.${Date.now()}${t?`.${t}`:``}`}};async function ke(e,t){let n=L({...Oe,...t});return new Promise((t,r)=>{n.parse(e,(e,n,i)=>{if(e){r(e);return}t({...n,...i})})})}const Ae=new Map;function W(e,t){let n=Ae.get(e);n||(n=T(e,{decode:decodeURIComponent}),Ae.set(e,n));let r=n(t);return r?r.params:{}}function je(e,t){return V(e.headers,t.headers)&&V(e.body,t.body)&&V(e.params,t.params)&&V(e.query,t.query)&&V(e.refererQuery,t.refererQuery)}function G(e,t){return!t||c(t)?``:` ${M.gray(`${e}:`)}${JSON.stringify(t)}`}function Me(e,t,n){let{url:r,method:i,query:a,params:o,body:s}=e,{pathname:c}=new URL(r,`http://example.com`);c=M.green(decodeURIComponent(c));let l=M.magenta.bold(i),u=G(`query`,a),d=G(`params`,o),f=G(`body`,s),p=n?` 🎲 ${M.bgYellow(`ERR`)}`:``,m=` ${M.dim.underline(`(${t})`)}`;return`${l}${p} ${c}${u}${d}${f}${m}`}function Ne(e,n,{pathname:r,method:i,request:a,activeScene:s}){return e.find(e=>{if(!r||!e||!e.url||e.ws||!(e.method?o(e.method)?e.method:[e.method]:[`GET`,`POST`]).includes(i)||!he(s,e.scene))return!1;let c=H(e.url,r);if(c&&e.validator){let i=W(e.url,r);if(l(e.validator))return e.validator({params:i,...a});{let[o,s]=t(je,{params:i,...a},e.validator);if(o){let t=e.__filepath__;return n.error(`${M.red(`mock error at ${r}`)}\n${o}\n at validator (${M.underline(t)})`,e.log),!1}return s}}return c})}const K={};function q(e){if(K[e])return K[e];let t=[],n=(e,r=!1)=>{for(let i of e)if(i.type===`text`){let e=i.value.split(`/`).filter(Boolean);e.length&&t.push(...e.map(e=>({type:`text`,value:e})))}else i.type===`group`?n(i.tokens,!0):(r&&(i.optional=!0),t.push(i))};return n(E(e).tokens),K[e]=t,t}function Pe(e){let t=e.map(e=>q(e).length);return t=t.length===0?[1]:t,Math.max(...t)+2}function Fe(e,t){let n=q(e),r=n.filter(e=>e.type!==`text`);if(r.length===0)return 0;let i=r.length,a=0;for(let e=0;e<n.length;e++){let r=n[e],o=r.type!==`text`,s=r.type===`wildcard`,c=!!r.optional;a+=+!!o,e===n.length-1&&s?i+=(c?5:4)*10**(n.length===1?t+1:t):(s?i+=3*10**(t-1):i+=2*10**a,c&&(i+=10**a))}return i}function Ie(e){let t=Pe(e);return e.sort((e,n)=>Fe(e,t)-Fe(n,t))}function Le(e,t,n){let r=Ie(e.filter(e=>H(e,t))),{global:i=[],special:a={}}=n;if(i.length===0&&c(a)||r.length===0)return r;let[s,l]=g(r,e=>q(e).filter(e=>e.type!==`text`).length>0),u=i.filter(e=>s.includes(e));if(u.length>0&&(r=C([...l,...u,...s])),c(a))return r;let d=Object.keys(a).filter(e=>r.includes(e))[0];if(!d)return r;let f=a[d],{rules:p,when:m}=o(f)?{rules:f,when:[]}:f;return p.includes(r[0])&&(m.length===0||m.some(e=>D(e).regexp.test(t)))&&(r=C([d,...r])),r}const J=/^[\t\u0020-\u007E\u0080-\u00FF]+$/,Re=/^(?:low|medium|high)$/i,Y=Object.create(null),ze=/[\^$\\.*+?()[\]{}|]/g,Be=/[;=]/,Ve=/;/,He=/^(?:lax|none|strict)$/i;var Ue=class{name;value;maxAge;expires;path=`/`;domain;secure=!1;httpOnly=!0;sameSite=!1;overwrite=!1;priority;partitioned;constructor(e,t,n={}){if(!J.test(e)||Be.test(e))throw TypeError(`argument name is invalid`);if(t&&(!J.test(t)||Ve.test(t)))throw TypeError(`argument value is invalid`);if(this.name=e,this.value=t,Object.assign(this,n),this.value||(this.expires=new Date(0),this.maxAge=void 0),this.path&&!J.test(this.path))throw TypeError(`[Cookie] option path is invalid`);if(this.domain&&!J.test(this.domain))throw TypeError(`[Cookie] option domain is invalid`);if(typeof this.maxAge==`number`?Number.isNaN(this.maxAge)||!Number.isFinite(this.maxAge):this.maxAge)throw TypeError(`[Cookie] option maxAge is invalid`);if(this.priority&&!Re.test(this.priority))throw TypeError(`[Cookie] option priority is invalid`);if(this.sameSite&&this.sameSite!==!0&&!He.test(this.sameSite))throw TypeError(`[Cookie] option sameSite is invalid`)}toString(){return`${this.name}=${this.value}`}toHeader(){let e=this.toString();return this.maxAge&&(this.expires=new Date(Date.now()+this.maxAge)),this.path&&(e+=`; path=${this.path}`),this.expires&&(e+=`; expires=${this.expires.toUTCString()}`),this.domain&&(e+=`; domain=${this.domain}`),this.priority&&(e+=`; priority=${this.priority.toLowerCase()}`),this.sameSite&&(e+=`; samesite=${this.sameSite===!0?`strict`:this.sameSite.toLowerCase()}`),this.secure&&(e+=`; secure`),this.httpOnly&&(e+=`; httponly`),this.partitioned&&(e+=`; partitioned`),e}};function We(e,t){if(e.length!==t.length)return!1;if(k.timingSafeEqual)return k.timingSafeEqual(e,t);for(let n=0;n<e.length;n++)if(e[n]!==t[n])return!1;return!0}function Ge(e,t){return k.createHmac(`sha256`,e).update(t).digest()}function Ke(e,t){let n=String(e),r=String(t),i=k.randomBytes(32);return We(Ge(i,n),Ge(i,r))&&e===t}const qe=/[/+=]/g,Je={"/":`_`,"+":`-`,"=":``};var Ye=class{algorithm;encoding;keys=[];constructor(e,t,n){this.keys=e,this.algorithm=t||`sha256`,this.encoding=n||`base64`}sign(e,t=this.keys[0]){return k.createHmac(this.algorithm,t).update(e).digest(this.encoding).replace(qe,e=>Je[e])}index(e,t){for(let n=0,r=this.keys.length;n<r;n++)if(Ke(t,this.sign(e,this.keys[n])))return n;return-1}verify(e,t){return this.index(e,t)>-1}},Xe=class{request;response;secure;keys;constructor(e,t,n={}){this.request=e,this.response=t,this.secure=n.secure,n.keys instanceof Ye?this.keys=n.keys:o(n.keys)&&(this.keys=new Ye(n.keys))}set(e,t,n){let r=this.request,i=this.response,a=S(i.getHeader(`Set-Cookie`)),o=new Ue(e,t,n),s=n?.signed??!!this.keys,c=this.secure===void 0?r.protocol===`https`||Qe(r):!!this.secure;if(!c&&n?.secure)throw Error(`Cannot send secure cookie over unencrypted connection`);if(o.secure=n?.secure??c,$e(a,o),s&&n){if(!this.keys)throw Error(`.keys required for signed cookies`);o.value=this.keys.sign(o.toString()),o.name+=`.sig`,$e(a,o)}return(i.set?R.OutgoingMessage.prototype.setHeader:i.setHeader).call(i,`Set-Cookie`,a),this}get(e,t){let n=`${e}.sig`,r=t?.signed??!!this.keys,i=this.request.headers.cookie;if(!i)return;let a=i.match(Ze(e));if(!a)return;let o=a[1];if(o[0]===`"`&&(o=o.slice(1,-1)),!t||!r)return o;let s=this.get(n);if(!s)return;let c=`${e}=${o}`;if(!this.keys)throw Error(`.keys required for signed cookies`);let l=this.keys.index(c,s);if(l<0)this.set(n,null,{path:`/`,signed:!1});else return l&&this.set(n,this.keys.sign(c),{signed:!1}),o}};function Ze(e){return Y[e]||(Y[e]=RegExp(`(?:^|;) *${e.replace(ze,`\\$&`)}=([^;]*)`)),Y[e]}function Qe(e){return!!(e.socket?e.socket.encrypted:e.connection.encrypted)}function $e(e,t){if(t.overwrite)for(let n=e.length-1;n>=0;n--)e[n].indexOf(`${t.name}=`)===0&&e.splice(n,1);e.push(t.toHeader())}const et=`date.expires.last-modified.server.x-powered-by.x-aspnet-version.x-nginx-version.via.cache-control.etag.age.connection.keep-alive.proxy-authenticate.proxy-authorization.proxy-connection.trailer.access-control-allow-origin.access-control-allow-credentials.access-control-allow-methods.access-control-allow-headers.access-control-expose-headers.access-control-max-age.origin.p3p.pragma.x-request-id.x-correlation-id.x-trace-id.x-varnish.x-cache.x-cache-hits.x-cache-status.cf-cache-status.cf-ray.cf-request-id.server-timing.x-dns-prefetch-control`.split(`.`);async function tt(e,t){try{switch(t.toLowerCase()){case`gzip`:case`x-gzip`:return{body:await at(e),encoding:`identity`};case`deflate`:case`x-deflate`:return{body:await ot(e),encoding:`identity`};case`br`:return{body:await it(e),encoding:`identity`};case`zstd`:return{body:await rt(e),encoding:`identity`}}}catch{}return{body:e,encoding:t}}let nt=null;async function rt(e){if(z.zstdDecompress)return new Promise((t,n)=>{z.zstdDecompress(e,(e,r)=>{e?n(e):t(r)})});if(!nt){let{ZstdCodec:e}=await import(`zstd-codec`);nt=await new Promise(t=>{e.run(e=>{t(new e.Streaming)})})}return nt.decompress(e,e.length)}async function it(e){return new Promise((t,n)=>{z.brotliDecompress(e,(e,r)=>{e?n(e):t(r)})})}async function at(e){return new Promise((t,n)=>{z.gunzip(e,(e,r)=>{e?n(e):t(r)})})}async function ot(e){return new Promise((t,n)=>{z.inflate(e,(e,r)=>{e?n(e):t(r)})})}const st=new Intl.DateTimeFormat(`en-US`,{year:`numeric`,month:`numeric`,day:`numeric`,hour:`numeric`,minute:`numeric`,second:`numeric`,hour12:!1});function ct(e,t,n){let{query:r}=U(e.url),i=e.method.toUpperCase(),o=(e.headers[`content-type`]||``).split(`;`)[0].trim();return o.startsWith(`multipart/form-data`)&&d(n)&&(n={...n},h(n).forEach(e=>{let t=n[e];d(t)&&a(t,`filepath`)&&a(t,`mimetype`)&&delete n[e]})),O.isBuffer(n)&&(n=n.toString(),o=`buffer`),{method:i,pathname:t,query:r,bodyType:o,body:n}}async function lt(e,t){let n=e.statusCode||200,r=e.statusMessage||`OK`,i={};for(let[t,n]of Object.entries(e.headers)){let e=t.toLowerCase();n!==void 0&&!et.includes(e)&&(i[t]=String(n))}let a=fe(i[`content-type`]||``);if(a){let{body:e,encoding:n}=await tt(t,i[`content-encoding`]||``);t=O.from(e),i[`content-encoding`]=n}return{status:n,statusText:r,headers:i,body:t.toString(a?`utf-8`:`base64`)}}function ut(e,t){if(e.pathname!==t.pathname||e.method!==t.method||e.bodyType!==t.bodyType||!r(e.query,t.query))return!1;if(t.bodyType===`buffer`&&e.bodyType===`buffer`){let n=O.from(t.body),r=O.from(e.body);if(n.length!==r.length||!n.equals(r))return!1}return!!r(e.body,t.body)}function dt(e){if(l(e))return e;let{mode:t=`glob`}=e,n=S(e.include),r=S(e.exclude);if(t===`glob`){let{isMatch:e}=oe(n,r);return t=>e(t.pathname)}return e=>n.some(t=>H(t,e.pathname))&&r.every(t=>!H(t,e.pathname))}function ft(e,t){return j.join(t,`${m(e)}.json`)}const X=new Map;async function pt(e){if(X.has(e))return X.get(e);try{if(!N.existsSync(e))return[];let t=await N.promises.readFile(e,`utf-8`)||`[]`,n=JSON.parse(t);return X.set(e,n),n}catch(t){return console.error(`Error reading record file ${e}:`,t),[]}}async function mt(e,t){try{X.set(e,t),await N.promises.mkdir(j.dirname(e),{recursive:!0}),await N.promises.writeFile(e,JSON.stringify(t,null,2),`utf-8`)}catch(t){console.error(`Error writing record file ${e}:`,t)}}const Z=new WeakMap;function ht(e,t,n){Z.set(e,{body:n,pathname:t,timestamp:Date.now()})}var gt=class{options;filter;constructor(e){this.options=e,this.filter=dt(e.filter)}setup(e){let t=this.options;if(!e.server||!t.enabled)return;let n=this.record.bind(this),r=e.server.proxy||{};h(r).forEach(e=>{let t=r[e],i=typeof t==`string`?{target:t}:t;if(i.ws)return;let{configure:a,...o}=i;r[e]={...o,configure(e,t){a?.call(this,e,t),e.on(`proxyRes`,(e,t)=>{let r=[];e.on(`data`,e=>e&&r.push(e)),e.on(`end`,()=>{n(t,e,O.concat(r)),r=null})})}}}),this.addGitignore()}async record(e,t,n){if(!Z.has(e))return;let{body:r,pathname:i,timestamp:a}=Z.get(e);if(Z.delete(e),!i)return;let o=ct(e,i,r);if(!this.filter(o))return;let{cwd:s,dir:c,status:l,expires:u,overwrite:d}=this.options;if(l.length!==0&&!l.includes(t.statusCode||200))return;let f={meta:{timestamp:a,filepath:``,createAt:st.format(a),referer:e.headers.referer||`unknown`},req:o,res:await lt(t,n)},p=ft(i,c);f.meta.filepath=p;let m=j.join(s,p),h=(await pt(m)).filter(e=>a-e.meta.timestamp<=u),g=h.findIndex(e=>ut(e.req,f.req)&&e.res.status===f.res.status);g===-1?h.push(f):(d||a-h[g].meta.timestamp>u)&&(h[g]=f),await mt(m,h)}async addGitignore(){let e=this.options;if(!e.gitignore)return;let t=j.join(e.cwd,e.dir);await P.mkdir(t,{recursive:!0}),N.existsSync(j.join(t,`.gitignore`))||await P.writeFile(j.join(t,`.gitignore`),`*
|
|
2
|
+
`,`utf-8`)}};async function _t(e,t,n,r){let i=ct(e,t,n),a=j.join(r.cwd,ft(i.pathname,r.dir)),o=Date.now(),s=(await pt(a)).filter(e=>o-e.meta.timestamp<r.expires&&ut(e.req,i)),c;if(c=r.status.length===0?s.find(e=>e.res.status===200)||s[0]:s.find(e=>r.status.includes(e.res.status)),c){let e=fe(c.res.headers[`content-type`]||``);return{url:c.req.pathname,status:c.res.status,statusText:c.res.statusText,headers:c.res.headers,body:O.from(c.res.body,e?`utf-8`:`base64`),type:`buffer`,__filepath__:c.meta.filepath}}}const vt=new WeakMap;function yt(e){let t=[];e.addListener(`data`,e=>{t?.push(O.from(e))}),e.addListener(`end`,()=>{t?.length&&vt.set(e,O.concat(t)),t=null})}function bt(e){if(!e.server)return;let t=e.server.proxy||{};h(t).forEach(e=>{let n=t[e],r=p(n)?{target:n}:n;if(r.ws)return;let{configure:i,...a}=r;t[e]={...a,configure(e,t){i?.(e,t),e.on(`proxyReq`,(e,t)=>{let n=vt.get(t);n&&(vt.delete(t),e.headersSent||e.setHeader(`Content-Length`,n.byteLength),e.writableEnded||e.write(n))})}}})}function xt(e){return re[e]||`Unknown`}function Q(e,t=200,n){e.statusCode=t,e.statusMessage=n||xt(t)}async function St(e,t,r,i){let{headers:a,type:o=`json`}=r,s=r.__filepath__,c=ie.contentType(o)||ie.contentType(ie.lookup(o)||``);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`),s&&t.setHeader(`X-File-Path`,s),!a)return;let[u,d]=await n(async()=>l(a)?await a(e):a);if(u){i.error(`${M.red(`mock error at ${e.url.split(`?`)[0]}`)}\n${u}\n at headers (${M.underline(s)})`,r.log);return}h(d).forEach(e=>t.setHeader(e,d[e]))}async function Ct(e,t,r,i){let{cookies:a}=r;if(!a)return;let[s,c]=await n(async()=>l(a)?await a(e):a);if(s){let t=r.__filepath__;i.error(`${M.red(`mock error at ${e.url.split(`?`)[0]}`)}\n${s}\n at cookies (${M.underline(t)})`,r.log);return}h(c).forEach(e=>{let n=c[e],[r,i]=o(n)?n:[n];t.setCookie(e,r,i)})}function wt(e,t,n){if(ue(t))t.pipe(e);else if(O.isBuffer(t))e.end(n===`text`||n===`json`?t.toString(`utf-8`):t);else{let r=typeof t==`string`?t:JSON.stringify(t);e.end(n===`buffer`?O.from(r):r)}}async function Tt(e,t){if(!t||typeof t==`number`&&t<=0||o(t)&&t.length!==2)return;let n=0;if(o(t)){let[e,r]=t;n=_(e,r)}else n=t-(x()-e);n>0&&await y(n)}function Et(e,{formidableOptions:t={},bodyParserOptions:r={},proxies:i,cookiesOptions:a,logger:o,priority:s={},cors:c,record:d,replay:f,activeScene:p}){let m=Ee(c);return async function(c,h,g){let _=x(),{query:v,pathname:y}=U(c.url);if(!y||i.length===0||!i.some(e=>ce(e,c.url)))return g();let b=e.mockData,C=Le(Object.keys(b),y,s);if(C.length===0&&!d.enabled)return g();yt(c);let w=new Xe(c,h,a),T,E,D=c.method.toUpperCase(),O={query:v,refererQuery:c.headers.referer?U(c.headers.referer).query:{},body:await De(c,o,t,r),headers:c.headers,getCookie:w.get.bind(w)},k=c.headers[`x-mock-scene`],ee=k?S(k).map(e=>e.split(`,`).map(e=>e.trim())).flat().filter(Boolean):p;for(let e of C)if(T=Ne(b[e],o,{pathname:y,method:D,request:O,activeScene:ee}),T){E=e;break}if(f&&!T&&(T=await _t(c,y,O.body,d)),!T){d.enabled&&ht(c,y,O.body);let e=C.map(e=>e===E?M.underline.bold(e):M.dim(e)).join(`, `);return e.length&&o.warn(`${M.green(y)} matches ${e}, but mock data is not found.`),g()}if(m){let[e]=await n(m,c,h);if(e)return o.error(`CORS error: ${e}`),g(e)}let A=c,j=h;Object.assign(A,O),A.params=W(T.url,y),j.setCookie=w.set.bind(w);let{delay:te,type:ne=`json`,response:N,log:P,error:F,__filepath__:I}=T,{body:L,status:R=200,statusText:z}=T,re=F&&(F.probability??.5)>Math.random();if(re&&(R=F.status??500,z=F.statusText,L=F.body),Q(j,R,z),await St(A,j,T,o),await Ct(A,j,T,o),o.info(Me(A,I,re),P),o.debug(`${M.magenta(`DEBUG`)} ${M.underline(y)} matches: [ ${C.map(e=>e===E?M.underline.bold(e):M.dim(e)).join(`, `)} ]\n`),!u(L)){let[e]=await n(async()=>{let e=l(L)?await L(A):L;await Tt(_,te),wt(j,e,ne)});e&&(o.error(`${M.red(`mock error at ${y}`)}\n ${e}\n at body (${M.underline.gray(I)})`,P),Q(j,500),h.end(``));return}if(N){let[e]=await n(async()=>{await Tt(_,te),await N(A,j,g)});e&&(o.error(`${M.red(`mock error at ${y}`)}\n ${e}\n at response (${M.underline.gray(I)})`,P),Q(j,500),h.end(``));return}h.end(``)}}function Dt(e,t,{wsProxies:n,cookiesOptions:r,logger:a,activeScene:o}){let s=new Map,c=new Map,l=new WeakMap,u=e=>{let t=c.get(e);return t||c.set(e,t=new Map),t},d=(e,t)=>{let n=e.get(t);return n||e.set(t,n=new ae({noServer:!0})),n},f=(e,t)=>{let n=s.get(e);n||s.set(e,n=new Set),n.add(t)},p=(e,t,n,r,i,o)=>{try{n.setup?.(t,r),t.on(`close`,()=>e.delete(i)),t.on(`error`,e=>{a.error(`${M.red(`WebSocket mock error at ${t.path}`)}\n${e}\n at setup (${o})`,n.log)})}catch(e){a.error(`${M.red(`WebSocket mock error at ${t.path}`)}\n${e}\n at setup (${o})`,n.log)}},m=(e,t,n,r)=>{e.emit(`connection`,t,n),t.on(`close`,()=>{i(r,e=>e.ws===t,e=>v(r,e))})},g=(e,t,n,r,i)=>{let{cleanupList:a,connectionList:o,context:s}=l.get(t);Ot(a),o.forEach(({ws:e})=>e.removeAllListeners()),t.removeAllListeners(),p(e,t,n,s,r,i),o.forEach(({ws:e,req:n})=>m(t,e,n,o))};e.on?.(`mock:update-end`,t=>{if(!s.has(t))return;let n=s.get(t);if(n)for(let r of n.values())for(let n of e.mockData[r]){if(!n.ws||n.__filepath__!==t)continue;let e=u(r);for(let[r,i]of e.entries())g(e,i,n,r,t);return}});let _=S(o);t?.on(`upgrade`,(t,i,o)=>{let{pathname:s,query:c}=U(t.url);if(!s||n.length===0||!n.some(e=>ce(e,t.url)))return;let g=e.mockData,v=h(g).find(e=>H(e,s));if(!v)return;let y=g[v].find(e=>e.url&&e.ws&&he(_,e.scene)&&H(e.url,s));if(!y)return;let b=y.__filepath__;f(b,v);let x=u(v),S=d(x,s),C=l.get(S);if(!C){let e=[],t={onCleanup:t=>e.push(t)};C={cleanupList:e,context:t,connectionList:[]},l.set(S,C),p(x,S,y,t,s,b)}let w=t,T=new Xe(t,t,r),{query:E}=U(t.headers.referer||``);w.query=c,w.refererQuery=E,w.params=W(v,s),w.getCookie=T.get.bind(T),S.handleUpgrade(w,i,o,e=>{a.info(`${M.magenta.bold(`WebSocket`)} ${M.green(t.url)} connected ${M.dim(`(${b})`)}`,y.log),C.connectionList.push({req:w,ws:e}),m(S,e,w,C.connectionList)})}),t?.on(`close`,()=>{for(let e of c.values()){for(let t of e.values())Ot(l.get(t).cleanupList),t.close();e.clear()}c.clear(),s.clear()})}function Ot(e){let t;for(;t=e.shift();)t?.()}const $={silent:0,error:1,warn:2,info:3,debug:4};function kt(e,t=`info`){e=`[${e}]`;function n(n,r,i){if(i=s(i)?i?t:`error`:i,$[i]>=$[n]){let t=n===`info`||n===`debug`?`log`:n,i=n===`debug`?M.magenta.bold(e):n===`info`?M.cyan.bold(e):n===`warn`?M.yellow.bold(e):M.red.bold(e),a=`${M.dim(new Date().toLocaleTimeString())} ${i} ${r}`;console[t](a)}}return{debug(e,r=t){n(`debug`,e,r)},info(e,r=t){n(`info`,e,r)},warn(e,r=t){n(`warn`,e,r)},error(e,r=t){n(`error`,e,r)}}}export{bt as a,Se as c,xe as d,be as f,Et as i,we as l,oe as m,$ as n,gt as o,de as p,Dt as r,Ce as s,kt as t,ge as u};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { c as LogLevel, f as MockServerPluginOptions, n as MockOptions, o as MockHttpItem, p as ServerBuildOption, r as MockWebsocketItem, y as ResolvedRecordOptions } from "./index-
|
|
1
|
+
import { c as LogLevel, f as MockServerPluginOptions, n as MockOptions, o as MockHttpItem, p as ServerBuildOption, r as MockWebsocketItem, y as ResolvedRecordOptions } from "./index-BmZUk72e.js";
|
|
2
2
|
import { Matcher } from "picomatch";
|
|
3
3
|
import EventEmitter from "node:events";
|
|
4
4
|
import { CorsOptions } from "cors";
|
package/dist/server.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as processRawData, c as Logger, i as processMockData, l as createLogger, n as CreateMockMiddlewareOptions, o as sortByValidator, r as createMockMiddleware, t as mockWebSocket, u as logLevels } from "./server-
|
|
1
|
+
import { a as processRawData, c as Logger, i as processMockData, l as createLogger, n as CreateMockMiddlewareOptions, o as sortByValidator, r as createMockMiddleware, t as mockWebSocket, u as logLevels } from "./server-a8HL1JRZ.js";
|
|
2
2
|
export { CreateMockMiddlewareOptions, Logger, createLogger, createMockMiddleware, logLevels, mockWebSocket, processMockData, processRawData, sortByValidator };
|
package/dist/server.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{c as e,i as t,l as n,n as r,r as i,s as a,t as o}from"./server-
|
|
1
|
+
import{c as e,i as t,l as n,n as r,r as i,s as a,t as o}from"./server-B4Hh46_a.js";export{o as createLogger,t as createMockMiddleware,r as logLevels,i as mockWebSocket,a as processMockData,e as processRawData,n as sortByValidator};
|
package/dist/types.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { C as MockRequest, D as GetCookieOption, E as CookiesOption, O as SetCookieOption, S as Method, T as ResponseBody, _ as RecordedRequest, a as MockErrorConfig, b as ExtraRequest, c as LogLevel, d as MockMatchSpecialPriority, f as MockServerPluginOptions, g as RecordedReq, h as RecordedMeta, i as WebSocketSetupContext, l as LogType, m as RecordOptions, n as MockOptions, o as MockHttpItem, p as ServerBuildOption, r as MockWebsocketItem, s as BodyParserOptions, t as FormidableFile, u as MockMatchPriority, v as RecordedRes, w as MockResponse, x as Headers, y as ResolvedRecordOptions } from "./index-
|
|
1
|
+
import { C as MockRequest, D as GetCookieOption, E as CookiesOption, O as SetCookieOption, S as Method, T as ResponseBody, _ as RecordedRequest, a as MockErrorConfig, b as ExtraRequest, c as LogLevel, d as MockMatchSpecialPriority, f as MockServerPluginOptions, g as RecordedReq, h as RecordedMeta, i as WebSocketSetupContext, l as LogType, m as RecordOptions, n as MockOptions, o as MockHttpItem, p as ServerBuildOption, r as MockWebsocketItem, s as BodyParserOptions, t as FormidableFile, u as MockMatchPriority, v as RecordedRes, w as MockResponse, x as Headers, y as ResolvedRecordOptions } from "./index-BmZUk72e.js";
|
|
2
2
|
export { BodyParserOptions, CookiesOption, ExtraRequest, FormidableFile, GetCookieOption, Headers, LogLevel, LogType, Method, MockErrorConfig, MockHttpItem, MockMatchPriority, MockMatchSpecialPriority, MockOptions, MockRequest, MockResponse, MockServerPluginOptions, MockWebsocketItem, RecordOptions, RecordedMeta, RecordedReq, RecordedRequest, RecordedRes, ResolvedRecordOptions, ResponseBody, ServerBuildOption, SetCookieOption, WebSocketSetupContext };
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vite-plugin-mock-dev-server",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "2.2.
|
|
4
|
+
"version": "2.2.1",
|
|
5
5
|
"description": "Vite Plugin for API mock dev server.",
|
|
6
6
|
"author": "pengzhanbo <q942450674@outlook.com> (https://github.com/pengzhanbo)",
|
|
7
7
|
"license": "MIT",
|
|
@@ -64,7 +64,7 @@
|
|
|
64
64
|
}
|
|
65
65
|
},
|
|
66
66
|
"dependencies": {
|
|
67
|
-
"@pengzhanbo/utils": "^3.
|
|
67
|
+
"@pengzhanbo/utils": "^3.7.2",
|
|
68
68
|
"ansis": "^4.2.0",
|
|
69
69
|
"chokidar": "^5.0.0",
|
|
70
70
|
"co-body": "^6.2.0",
|
|
@@ -72,7 +72,7 @@
|
|
|
72
72
|
"debug": "^4.4.3",
|
|
73
73
|
"formidable": "3.5.4",
|
|
74
74
|
"http-status": "^2.1.0",
|
|
75
|
-
"is-core-module": "^2.16.
|
|
75
|
+
"is-core-module": "^2.16.2",
|
|
76
76
|
"json5": "^2.2.3",
|
|
77
77
|
"local-pkg": "^1.1.2",
|
|
78
78
|
"mime-types": "^3.0.2",
|
|
@@ -83,8 +83,8 @@
|
|
|
83
83
|
},
|
|
84
84
|
"devDependencies": {
|
|
85
85
|
"esbuild": "^0.28.0",
|
|
86
|
-
"rolldown": "^1.0.0
|
|
87
|
-
"vite": "^8.0.
|
|
86
|
+
"rolldown": "^1.0.0",
|
|
87
|
+
"vite": "^8.0.11",
|
|
88
88
|
"zstd-codec": "^0.1.5"
|
|
89
89
|
},
|
|
90
90
|
"publishConfig": {
|
package/dist/server-BJ-Z5r-p.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{attempt as e,attemptAsync as t,deepEqual as n,findFirstThen as r,hasOwn as i,isArray as a,isBoolean as o,isEmptyObject as s,isFunction as c,isPlainObject as l,kebabCase as u,objectKeys as d,partition as f,random as p,remove as m,sleep as h,sortBy as g,timestamp as _,toArray as v,uniq as y}from"@pengzhanbo/utils";import b from"picomatch";import{match as x,parse as S,pathToRegexp as C}from"path-to-regexp";import w from"node:os";import T from"node:path";import E from"debug";import{parse as D}from"node:querystring";import O from"node:crypto";import k,{promises as A}from"node:fs";import j from"cors";import M from"ansis";import N from"co-body";import ee from"formidable";import P from"node:http";import{Buffer as F}from"node:buffer";import I from"node:zlib";import L from"http-status";import*as R from"mime-types";import{WebSocketServer as z}from"ws";function B(e,t){let n=[],r=[`**/node_modules/**`,...v(t)];return v(e).forEach(e=>{e[0]===`!`?r.push(e.slice(1)):n.push(e)}),{pattern:n,ignore:r,isMatch:b(n,{ignore:r})}}const V=new Map;function te(e,t){if(e[0]===`^`){let n=V.get(e);return n||V.set(e,n=new RegExp(e)),n.test(t)}return t.startsWith(e)}function ne(e){return typeof e==`object`&&!!e&&typeof e.pipe==`function`}function re(e){return ne(e)&&e.readable!==!1&&typeof e._read==`function`&&typeof e._readableState==`object`}const H={};async function ie(e){if(i(H,e))return H[e];try{return import.meta.resolve?H[e]=!!import.meta.resolve(e):(await import(e),H[e]=!0),H[e]}catch{}return H[e]=!1,!1}function ae(e){return[`text`,`json`,`xml`].some(t=>e.includes(t))}function U(e,t){if(!t)return!0;for(let n in t)if(!oe(e[n],t[n]))return!1;return!0}function oe(e,t){if(a(e)&&a(t)){let n=new Set;return t.every(t=>e.some((e,r)=>{if(n.has(r))return!1;let i=oe(e,t);return i&&n.add(r),i}))}return l(e)&&l(t)?U(e,t):Object.is(e,t)}const se=new Map;function W(e,t){let n=se.get(e);return n||(n=C(e).regexp,se.set(e,n)),n.test(t)}function ce(e,t){if(!t)return!0;let n=v(t);return e.length===0&&n.length>0?!1:n.length===0?!0:n.some(t=>e.includes(t))}const le=E(`vite:mock-dev-server`),ue=/\\/g,de=w.platform()===`win32`;function fe(e){return e.replace(ue,`/`)}function pe(e){return T.posix.normalize(de?fe(e):e)}function G(e){let t=new URL(e,`http://example.com`);return{pathname:decodeURIComponent(t.pathname),query:D(t.search.replace(/^\?/,``))}}function me(e,t){let n;return a(e)?n=e.map(e=>({...e,__filepath__:t})):`url`in e?n={...e,__filepath__:t}:(n=[],d(e).forEach(r=>{let i=e[r];a(i)?n.push(...i.map(e=>({...e,__filepath__:t}))):n.push({...i,__filepath__:t})})),n}function he(e){let t=[];for(let[,n]of e.entries())n&&t.push(...v(n));let n={};return t.filter(e=>l(e)&&e.enabled!==!1&&e.url).forEach(e=>{let{pathname:t,query:r}=G(e.url),i=n[t]??=[],a={...e,url:t};if(a.ws!==!0){let e=a.validator;s(r)||(c(e)?a.validator=function(t){return U(t.query,r)&&e(t)}:e?(a.validator={...e},a.validator.query=a.validator.query?{...r,...a.validator.query}:r):a.validator={query:r})}i.push(a)}),d(n).forEach(e=>{n[e]=ge(n[e])}),n}function ge(e){return g(e,e=>{if(e.ws===!0)return 0;let t=v(e.scene).length>0?0:1,{validator:n}=e;return!n||s(n)?2+t:c(n)?0+t:1/Object.keys(n).reduce((e,t)=>e+_e(n[t]),0)+t})}function _e(e){return e?d(e).length:0}function ve(e){let t=e?j(e):void 0;return t?(e,n)=>new Promise((r,i)=>t(e,n,e=>{e?i(e):r()})):void 0}async function ye(e,t,n,r={}){let i=e.method.toUpperCase();if([`HEAD`,`OPTIONS`].includes(i))return;let a=e.headers[`content-type`]?.toLocaleLowerCase()||``,{limit:o,formLimit:s,jsonLimit:c,textLimit:l,...u}=r;try{if(a.startsWith(`application/json`))return await N.json(e,{limit:c||o,...u});if(a.startsWith(`application/x-www-form-urlencoded`))return await N.form(e,{limit:s||o,...u});if(a.startsWith(`text/plain`))return await N.text(e,{limit:l||o,...u});if(a.startsWith(`multipart/form-data`))return await xe(e,n)}catch(e){t.error(e)}}const be={keepExtensions:!0,filename(e,t,n){return n?.originalFilename||`${e}.${Date.now()}${t?`.${t}`:``}`}};async function xe(e,t){let n=ee({...be,...t});return new Promise((t,r)=>{n.parse(e,(e,n,i)=>{if(e){r(e);return}t({...n,...i})})})}const Se=new Map;function K(e,t){let n=Se.get(e);n||(n=x(e,{decode:decodeURIComponent}),Se.set(e,n));let r=n(t);return r?r.params:{}}function Ce(e,t){return U(e.headers,t.headers)&&U(e.body,t.body)&&U(e.params,t.params)&&U(e.query,t.query)&&U(e.refererQuery,t.refererQuery)}function q(e,t){return!t||s(t)?``:` ${M.gray(`${e}:`)}${JSON.stringify(t)}`}function we(e,t,n){let{url:r,method:i,query:a,params:o,body:s}=e,{pathname:c}=new URL(r,`http://example.com`);c=M.green(decodeURIComponent(c));let l=M.magenta.bold(i),u=q(`query`,a),d=q(`params`,o),f=q(`body`,s),p=n?` 🎲 ${M.bgYellow(`ERR`)}`:``,m=` ${M.dim.underline(`(${t})`)}`;return`${l}${p} ${c}${u}${d}${f}${m}`}function Te(t,n,{pathname:r,method:i,request:o,activeScene:s}){return t.find(t=>{if(!r||!t||!t.url||t.ws||!(t.method?a(t.method)?t.method:[t.method]:[`GET`,`POST`]).includes(i)||!ce(s,t.scene))return!1;let l=W(t.url,r);if(l&&t.validator){let i=K(t.url,r);if(c(t.validator))return t.validator({params:i,...o});{let[a,s]=e(Ce,{params:i,...o},t.validator);if(a){let e=t.__filepath__;return n.error(`${M.red(`mock error at ${r}`)}\n${a}\n at validator (${M.underline(e)})`,t.log),!1}return s}}return l})}const J={};function Y(e){if(J[e])return J[e];let t=[],n=(e,r=!1)=>{for(let i of e)if(i.type===`text`){let e=i.value.split(`/`).filter(Boolean);e.length&&t.push(...e.map(e=>({type:`text`,value:e})))}else i.type===`group`?n(i.tokens,!0):(r&&(i.optional=!0),t.push(i))};return n(S(e).tokens),J[e]=t,t}function Ee(e){let t=e.map(e=>Y(e).length);return t=t.length===0?[1]:t,Math.max(...t)+2}function De(e,t){let n=Y(e),r=n.filter(e=>e.type!==`text`);if(r.length===0)return 0;let i=r.length,a=0;for(let e=0;e<n.length;e++){let r=n[e],o=r.type!==`text`,s=r.type===`wildcard`,c=!!r.optional;a+=+!!o,e===n.length-1&&s?i+=(c?5:4)*10**(n.length===1?t+1:t):(s?i+=3*10**(t-1):i+=2*10**a,c&&(i+=10**a))}return i}function Oe(e){let t=Ee(e);return e.sort((e,n)=>De(e,t)-De(n,t))}function ke(e,t,n){let r=Oe(e.filter(e=>W(e,t))),{global:i=[],special:o={}}=n;if(i.length===0&&s(o)||r.length===0)return r;let[c,l]=f(r,e=>Y(e).filter(e=>e.type!==`text`).length>0),u=i.filter(e=>c.includes(e));if(u.length>0&&(r=y([...l,...u,...c])),s(o))return r;let d=Object.keys(o).filter(e=>r.includes(e))[0];if(!d)return r;let p=o[d],{rules:m,when:h}=a(p)?{rules:p,when:[]}:p;return m.includes(r[0])&&(h.length===0||h.some(e=>C(e).regexp.test(t)))&&(r=y([d,...r])),r}const X=/^[\t\u0020-\u007E\u0080-\u00FF]+$/,Ae=/^(?:low|medium|high)$/i,Z=Object.create(null),je=/[\^$\\.*+?()[\]{}|]/g,Me=/[;=]/,Ne=/;/,Pe=/^(?:lax|none|strict)$/i;var Fe=class{name;value;maxAge;expires;path=`/`;domain;secure=!1;httpOnly=!0;sameSite=!1;overwrite=!1;priority;partitioned;constructor(e,t,n={}){if(!X.test(e)||Me.test(e))throw TypeError(`argument name is invalid`);if(t&&(!X.test(t)||Ne.test(t)))throw TypeError(`argument value is invalid`);if(this.name=e,this.value=t,Object.assign(this,n),this.value||(this.expires=new Date(0),this.maxAge=void 0),this.path&&!X.test(this.path))throw TypeError(`[Cookie] option path is invalid`);if(this.domain&&!X.test(this.domain))throw TypeError(`[Cookie] option domain is invalid`);if(typeof this.maxAge==`number`?Number.isNaN(this.maxAge)||!Number.isFinite(this.maxAge):this.maxAge)throw TypeError(`[Cookie] option maxAge is invalid`);if(this.priority&&!Ae.test(this.priority))throw TypeError(`[Cookie] option priority is invalid`);if(this.sameSite&&this.sameSite!==!0&&!Pe.test(this.sameSite))throw TypeError(`[Cookie] option sameSite is invalid`)}toString(){return`${this.name}=${this.value}`}toHeader(){let e=this.toString();return this.maxAge&&(this.expires=new Date(Date.now()+this.maxAge)),this.path&&(e+=`; path=${this.path}`),this.expires&&(e+=`; expires=${this.expires.toUTCString()}`),this.domain&&(e+=`; domain=${this.domain}`),this.priority&&(e+=`; priority=${this.priority.toLowerCase()}`),this.sameSite&&(e+=`; samesite=${this.sameSite===!0?`strict`:this.sameSite.toLowerCase()}`),this.secure&&(e+=`; secure`),this.httpOnly&&(e+=`; httponly`),this.partitioned&&(e+=`; partitioned`),e}};function Ie(e,t){if(e.length!==t.length)return!1;if(O.timingSafeEqual)return O.timingSafeEqual(e,t);for(let n=0;n<e.length;n++)if(e[n]!==t[n])return!1;return!0}function Le(e,t){return O.createHmac(`sha256`,e).update(t).digest()}function Re(e,t){let n=String(e),r=String(t),i=O.randomBytes(32);return Ie(Le(i,n),Le(i,r))&&e===t}const ze=/[/+=]/g,Be={"/":`_`,"+":`-`,"=":``};var Ve=class{algorithm;encoding;keys=[];constructor(e,t,n){this.keys=e,this.algorithm=t||`sha256`,this.encoding=n||`base64`}sign(e,t=this.keys[0]){return O.createHmac(this.algorithm,t).update(e).digest(this.encoding).replace(ze,e=>Be[e])}index(e,t){for(let n=0,r=this.keys.length;n<r;n++)if(Re(t,this.sign(e,this.keys[n])))return n;return-1}verify(e,t){return this.index(e,t)>-1}},He=class{request;response;secure;keys;constructor(e,t,n={}){this.request=e,this.response=t,this.secure=n.secure,n.keys instanceof Ve?this.keys=n.keys:a(n.keys)&&(this.keys=new Ve(n.keys))}set(e,t,n){let r=this.request,i=this.response,a=v(i.getHeader(`Set-Cookie`)),o=new Fe(e,t,n),s=n?.signed??!!this.keys,c=this.secure===void 0?r.protocol===`https`||We(r):!!this.secure;if(!c&&n?.secure)throw Error(`Cannot send secure cookie over unencrypted connection`);if(o.secure=n?.secure??c,Ge(a,o),s&&n){if(!this.keys)throw Error(`.keys required for signed cookies`);o.value=this.keys.sign(o.toString()),o.name+=`.sig`,Ge(a,o)}return(i.set?P.OutgoingMessage.prototype.setHeader:i.setHeader).call(i,`Set-Cookie`,a),this}get(e,t){let n=`${e}.sig`,r=t?.signed??!!this.keys,i=this.request.headers.cookie;if(!i)return;let a=i.match(Ue(e));if(!a)return;let o=a[1];if(o[0]===`"`&&(o=o.slice(1,-1)),!t||!r)return o;let s=this.get(n);if(!s)return;let c=`${e}=${o}`;if(!this.keys)throw Error(`.keys required for signed cookies`);let l=this.keys.index(c,s);if(l<0)this.set(n,null,{path:`/`,signed:!1});else return l&&this.set(n,this.keys.sign(c),{signed:!1}),o}};function Ue(e){return Z[e]||(Z[e]=RegExp(`(?:^|;) *${e.replace(je,`\\$&`)}=([^;]*)`)),Z[e]}function We(e){return!!(e.socket?e.socket.encrypted:e.connection.encrypted)}function Ge(e,t){if(t.overwrite)for(let n=e.length-1;n>=0;n--)e[n].indexOf(`${t.name}=`)===0&&e.splice(n,1);e.push(t.toHeader())}const Ke=`date.expires.last-modified.server.x-powered-by.x-aspnet-version.x-nginx-version.via.cache-control.etag.age.connection.keep-alive.proxy-authenticate.proxy-authorization.proxy-connection.trailer.access-control-allow-origin.access-control-allow-credentials.access-control-allow-methods.access-control-allow-headers.access-control-expose-headers.access-control-max-age.origin.p3p.pragma.x-request-id.x-correlation-id.x-trace-id.x-varnish.x-cache.x-cache-hits.x-cache-status.cf-cache-status.cf-ray.cf-request-id.server-timing.x-dns-prefetch-control`.split(`.`);async function qe(e,t){try{switch(t.toLowerCase()){case`gzip`:case`x-gzip`:return{body:await Ze(e),encoding:`identity`};case`deflate`:case`x-deflate`:return{body:await Qe(e),encoding:`identity`};case`br`:return{body:await Xe(e),encoding:`identity`};case`zstd`:return{body:await Ye(e),encoding:`identity`}}}catch{}return{body:e,encoding:t}}let Je=null;async function Ye(e){if(I.zstdDecompress)return new Promise((t,n)=>{I.zstdDecompress(e,(e,r)=>{e?n(e):t(r)})});if(!Je){let{ZstdCodec:e}=await import(`zstd-codec`);Je=await new Promise(t=>{e.run(e=>{t(new e.Streaming)})})}return Je.decompress(e,e.length)}async function Xe(e){return new Promise((t,n)=>{I.brotliDecompress(e,(e,r)=>{e?n(e):t(r)})})}async function Ze(e){return new Promise((t,n)=>{I.gunzip(e,(e,r)=>{e?n(e):t(r)})})}async function Qe(e){return new Promise((t,n)=>{I.inflate(e,(e,r)=>{e?n(e):t(r)})})}const $e=new Intl.DateTimeFormat(`en-US`,{year:`numeric`,month:`numeric`,day:`numeric`,hour:`numeric`,minute:`numeric`,second:`numeric`,hour12:!1});function et(e,t,n){let{query:r}=G(e.url),a=e.method.toUpperCase(),o=(e.headers[`content-type`]||``).split(`;`)[0].trim();return o.startsWith(`multipart/form-data`)&&l(n)&&(n={...n},d(n).forEach(e=>{let t=n[e];l(t)&&i(t,`filepath`)&&i(t,`mimetype`)&&delete n[e]})),F.isBuffer(n)&&(n=n.toString(),o=`buffer`),{method:a,pathname:t,query:r,bodyType:o,body:n}}async function tt(e,t){let n=e.statusCode||200,r=e.statusMessage||`OK`,i={};for(let[t,n]of Object.entries(e.headers)){let e=t.toLowerCase();n!==void 0&&!Ke.includes(e)&&(i[t]=String(n))}let a=ae(i[`content-type`]||``);if(a){let{body:e,encoding:n}=await qe(t,i[`content-encoding`]||``);t=F.from(e),i[`content-encoding`]=n}return{status:n,statusText:r,headers:i,body:t.toString(a?`utf-8`:`base64`)}}function nt(e,t){if(e.pathname!==t.pathname||e.method!==t.method||e.bodyType!==t.bodyType||!n(e.query,t.query))return!1;if(t.bodyType===`buffer`&&e.bodyType===`buffer`){let n=F.from(t.body),r=F.from(e.body);if(n.length!==r.length||!n.equals(r))return!1}return!!n(e.body,t.body)}function rt(e){if(c(e))return e;let{mode:t=`glob`}=e,n=v(e.include),r=v(e.exclude);if(t===`glob`){let{isMatch:e}=B(n,r);return t=>e(t.pathname)}return e=>n.some(t=>W(t,e.pathname))&&r.every(t=>!W(t,e.pathname))}function it(e,t){return T.join(t,`${u(e)}.json`)}const Q=new Map;async function at(e){if(Q.has(e))return Q.get(e);try{if(!k.existsSync(e))return[];let t=await k.promises.readFile(e,`utf-8`)||`[]`,n=JSON.parse(t);return Q.set(e,n),n}catch(t){return console.error(`Error reading record file ${e}:`,t),[]}}async function ot(e,t){try{Q.set(e,t),await k.promises.mkdir(T.dirname(e),{recursive:!0}),await k.promises.writeFile(e,JSON.stringify(t,null,2),`utf-8`)}catch(t){console.error(`Error writing record file ${e}:`,t)}}const $=new WeakMap;function st(e,t,n){$.set(e,{body:n,pathname:t,timestamp:Date.now()})}var ct=class{options;filter;constructor(e){this.options=e,this.filter=rt(e.filter)}setup(e){let t=this.options;if(!e.server||!t.enabled)return;let n=this.record.bind(this),r=e.server.proxy||{};d(r).forEach(e=>{let t=r[e],i=typeof t==`string`?{target:t}:t;if(i.ws)return;let{configure:a,...o}=i;r[e]={...o,configure(e,t){a?.call(this,e,t),e.on(`proxyRes`,(e,t)=>{let r=[];e.on(`data`,e=>e&&r.push(e)),e.on(`end`,()=>{n(t,e,F.concat(r)),r=null})})}}}),this.addGitignore()}async record(e,t,n){if(!$.has(e))return;let{body:r,pathname:i,timestamp:a}=$.get(e);if($.delete(e),!i)return;let o=et(e,i,r);if(!this.filter(o))return;let{cwd:s,dir:c,status:l,expires:u,overwrite:d}=this.options;if(l.length!==0&&!l.includes(t.statusCode||200))return;let f={meta:{timestamp:a,filepath:``,createAt:$e.format(a),referer:e.headers.referer||`unknown`},req:o,res:await tt(t,n)},p=it(i,c);f.meta.filepath=p;let m=T.join(s,p),h=(await at(m)).filter(e=>a-e.meta.timestamp<=u),g=h.findIndex(e=>nt(e.req,f.req)&&e.res.status===f.res.status);g===-1?h.push(f):(d||a-h[g].meta.timestamp>u)&&(h[g]=f),await ot(m,h)}async addGitignore(){let e=this.options;if(!e.gitignore)return;let t=T.join(e.cwd,e.dir);await A.mkdir(t,{recursive:!0}),k.existsSync(T.join(t,`.gitignore`))||await A.writeFile(T.join(t,`.gitignore`),`*
|
|
2
|
-
`,`utf-8`)}};async function lt(e,t,n,r){let i=et(e,t,n),a=T.join(r.cwd,it(i.pathname,r.dir)),o=Date.now(),s=await at(a),c=s.filter(e=>o-e.meta.timestamp<r.expires&&nt(e.req,i)),l;if(l=r.status.length===0?c.find(e=>e.res.status===200)||s[0]:c.find(e=>r.status.includes(e.res.status)),l){let e=ae(l.res.headers[`content-type`]||``);return{url:l.req.pathname,status:l.res.status,statusText:l.res.statusText,headers:l.res.headers,body:F.from(l.res.body,e?`utf-8`:`base64`),type:`buffer`,__filepath__:l.meta.filepath}}}const ut=new WeakMap;function dt(e){let t=[];e.addListener(`data`,e=>{t?.push(F.from(e))}),e.addListener(`end`,()=>{t?.length&&ut.set(e,F.concat(t)),t=null})}function ft(e){if(!e.server)return;let t=e.server.proxy||{};d(t).forEach(e=>{let n=t[e],r=typeof n==`string`?{target:n}:n;if(r.ws)return;let{configure:i,...a}=r;t[e]={...a,configure(e,t){i?.(e,t),e.on(`proxyReq`,(e,t)=>{let n=ut.get(t);n&&(ut.delete(t),e.headersSent||e.setHeader(`Content-Length`,n.byteLength),e.writableEnded||e.write(n))})}}})}function pt(e){return L[e]||`Unknown`}function mt(e,t=200,n){e.statusCode=t,e.statusMessage=n||pt(t)}async function ht(e,n,r,i){let{headers:a,type:o=`json`}=r,s=r.__filepath__,l=R.contentType(o)||R.contentType(R.lookup(o)||``);if(l&&n.setHeader(`Content-Type`,l),n.setHeader(`Cache-Control`,`no-cache,max-age=0`),n.setHeader(`X-Mock-Power-By`,`vite-plugin-mock-dev-server`),s&&n.setHeader(`X-File-Path`,s),!a)return;let[u,f]=await t(async()=>c(a)?await a(e):a);if(u){i.error(`${M.red(`mock error at ${e.url.split(`?`)[0]}`)}\n${u}\n at headers (${M.underline(s)})`,r.log);return}d(f).forEach(e=>n.setHeader(e,f[e]))}async function gt(e,n,r,i){let{cookies:o}=r;if(!o)return;let[s,l]=await t(async()=>c(o)?await o(e):o);if(s){let t=r.__filepath__;i.error(`${M.red(`mock error at ${e.url.split(`?`)[0]}`)}\n${s}\n at cookies (${M.underline(t)})`,r.log);return}d(l).forEach(e=>{let t=l[e],[r,i]=a(t)?t:[t];n.setCookie(e,r,i)})}function _t(e,t,n){if(re(t))t.pipe(e);else if(F.isBuffer(t))e.end(n===`text`||n===`json`?t.toString(`utf-8`):t);else{let r=typeof t==`string`?t:JSON.stringify(t);e.end(n===`buffer`?F.from(r):r)}}async function vt(e,t){if(!t||typeof t==`number`&&t<=0||a(t)&&t.length!==2)return;let n=0;if(a(t)){let[e,r]=t;n=p(e,r)}else n=t-(_()-e);n>0&&await h(n)}function yt(e,{formidableOptions:n={},bodyParserOptions:r={},proxies:i,cookiesOptions:a,logger:o,priority:s={},cors:l,record:u,replay:d,activeScene:f}){let p=ve(l);return async function(l,m,h){let g=_(),{query:y,pathname:b}=G(l.url);if(!b||i.length===0||!i.some(e=>te(e,l.url)))return h();let x=e.mockData,S=ke(Object.keys(x),b,s);if(S.length===0&&!u.enabled)return h();dt(l);let C=new He(l,m,a),w,T,E=l.method.toUpperCase(),D={query:y,refererQuery:G(l.headers.referer||``).query,body:await ye(l,o,n,r),headers:l.headers,getCookie:C.get.bind(C)},O=l.headers[`x-mock-scene`],k=O?v(O).map(e=>e.split(`,`).map(e=>e.trim())).flat().filter(Boolean):f;for(let e of S)if(w=Te(x[e],o,{pathname:b,method:E,request:D,activeScene:k}),w){T=e;break}if(d&&!w&&(w=await lt(l,b,D.body,u)),!w){u.enabled&&st(l,b,D.body);let e=S.map(e=>e===T?M.underline.bold(e):M.dim(e)).join(`, `);return e.length&&o.warn(`${M.green(b)} matches ${e}, but mock data is not found.`),h()}if(p){let[e]=await t(p,l,m);if(e)return o.error(`CORS error: ${e}`),h(e)}let A=l,j=m;Object.assign(A,D),A.params=K(w.url,b),j.setCookie=C.set.bind(C);let{delay:N,type:ee=`json`,response:P,log:F,error:I,__filepath__:L}=w,{body:R,status:z=200,statusText:B}=w,V=I&&(I.probability??.5)>Math.random();if(V&&(z=I.status??500,B=I.statusText,R=I.body),mt(j,z,B),await ht(A,j,w,o),await gt(A,j,w,o),o.info(we(A,L,V),F),o.debug(`${M.magenta(`DEBUG`)} ${M.underline(b)} matches: [ ${S.map(e=>e===T?M.underline.bold(e):M.dim(e)).join(`, `)} ]\n`),R){let[e]=await t(async()=>{let e=c(R)?await R(A):R;await vt(g,N),_t(j,e,ee)});e&&(o.error(`${M.red(`mock error at ${b}`)}\n ${e}\n at body (${M.underline.gray(L)})`,F),mt(j,500),m.end(``));return}if(P){let[e]=await t(async()=>{await vt(g,N),await P(A,j,h)});e&&(o.error(`${M.red(`mock error at ${b}`)}\n ${e}\n at response (${M.underline.gray(L)})`,F),mt(j,500),m.end(``));return}m.end(``)}}function bt(e,t,{wsProxies:n,cookiesOptions:i,logger:a,activeScene:o}){let s=new Map,c=new Map,l=new WeakMap,u=e=>{let t=c.get(e);return t||c.set(e,t=new Map),t},f=(e,t)=>{let n=e.get(t);return n||e.set(t,n=new z({noServer:!0})),n},p=(e,t)=>{let n=s.get(e);n||s.set(e,n=new Set),n.add(t)},h=(e,t,n,r,i,o)=>{try{n.setup?.(t,r),t.on(`close`,()=>e.delete(i)),t.on(`error`,e=>{a.error(`${M.red(`WebSocket mock error at ${t.path}`)}\n${e}\n at setup (${o})`,n.log)})}catch(e){a.error(`${M.red(`WebSocket mock error at ${t.path}`)}\n${e}\n at setup (${o})`,n.log)}},g=(e,t,n,i)=>{e.emit(`connection`,t,n),t.on(`close`,()=>{r(i,e=>e.ws===t,e=>m(i,e))})},_=(e,t,n,r,i)=>{let{cleanupList:a,connectionList:o,context:s}=l.get(t);xt(a),o.forEach(({ws:e})=>e.removeAllListeners()),t.removeAllListeners(),h(e,t,n,s,r,i),o.forEach(({ws:e,req:n})=>g(t,e,n,o))};e.on?.(`mock:update-end`,t=>{if(!s.has(t))return;let n=s.get(t);if(n)for(let r of n.values())for(let n of e.mockData[r]){if(!n.ws||n.__filepath__!==t)continue;let e=u(r);for(let[r,i]of e.entries())_(e,i,n,r,t);return}});let y=v(o);t?.on(`upgrade`,(t,r,o)=>{let{pathname:s,query:c}=G(t.url);if(!s||n.length===0||!n.some(e=>te(e,t.url)))return;let m=e.mockData,_=d(m).find(e=>W(e,s));if(!_)return;let v=m[_].find(e=>e.url&&e.ws&&ce(y,e.scene)&&W(e.url,s));if(!v)return;let b=v.__filepath__;p(b,_);let x=u(_),S=f(x,s),C=l.get(S);if(!C){let e=[],t={onCleanup:t=>e.push(t)};C={cleanupList:e,context:t,connectionList:[]},l.set(S,C),h(x,S,v,t,s,b)}let w=t,T=new He(t,t,i),{query:E}=G(t.headers.referer||``);w.query=c,w.refererQuery=E,w.params=K(_,s),w.getCookie=T.get.bind(T),S.handleUpgrade(w,r,o,e=>{a.info(`${M.magenta.bold(`WebSocket`)} ${M.green(t.url)} connected ${M.dim(`(${b})`)}`,v.log),C.connectionList.push({req:w,ws:e}),g(S,e,w,C.connectionList)})}),t?.on(`close`,()=>{for(let e of c.values()){for(let t of e.values())xt(l.get(t).cleanupList),t.close();e.clear()}c.clear(),s.clear()})}function xt(e){let t;for(;t=e.shift();)t?.()}const St={silent:0,error:1,warn:2,info:3,debug:4};function Ct(e,t=`info`){e=`[${e}]`;function n(n,r,i){if(i=o(i)?i?t:`error`:i,St[i]>=St[n]){let t=n===`info`||n===`debug`?`log`:n,i=n===`debug`?M.magenta.bold(e):n===`info`?M.cyan.bold(e):n===`warn`?M.yellow.bold(e):M.red.bold(e),a=`${M.dim(new Date().toLocaleTimeString())} ${i} ${r}`;console[t](a)}}return{debug(e,r=t){n(`debug`,e,r)},info(e,r=t){n(`info`,e,r)},warn(e,r=t){n(`warn`,e,r)},error(e,r=t){n(`error`,e,r)}}}export{ft as a,me as c,pe as d,ie as f,yt as i,ge as l,St as n,ct as o,B as p,bt as r,he as s,Ct as t,le as u};
|