rspack-plugin-mock 1.3.0 → 2.0.0
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 +7 -2
- package/README.zh-CN.md +7 -2
- package/dist/{helper.d.mts → helper.d.ts} +1 -1
- package/dist/helper.js +172 -0
- package/dist/{index.d.mts → index.d.ts} +3 -3
- package/dist/index.js +84 -0
- package/dist/json5-loader.mjs +8 -0
- package/dist/options-Bd0PSZeT.js +446 -0
- package/dist/{rsbuild.d.mts → rsbuild.d.ts} +1 -1
- package/dist/rsbuild.js +92 -0
- package/dist/{server-4ETytB7L.d.mts → server-_doRwsZm.d.ts} +15 -15
- package/dist/{server.d.mts → server.d.ts} +1 -2
- package/dist/server.js +2 -0
- package/dist/{types-Bt_OTa7I.d.mts → types-GT6M6WuI.d.ts} +3 -3
- package/dist/ws-BcLCWVaK.js +1003 -0
- package/package.json +33 -34
- package/dist/helper.mjs +0 -4
- package/dist/index.mjs +0 -1
- package/dist/json5-loader.cjs +0 -1
- package/dist/options-BUfaThYe.mjs +0 -43
- package/dist/rsbuild.mjs +0 -1
- package/dist/server.mjs +0 -1
- package/dist/ws-BM06pHhL.mjs +0 -1
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "rspack-plugin-mock",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "
|
|
4
|
+
"version": "2.0.0",
|
|
5
5
|
"description": "inject api mock server to development server",
|
|
6
6
|
"author": "pengzhanbo <q942450674@outlook.com> (https://github.com/pengzhanbo)",
|
|
7
7
|
"license": "MIT",
|
|
@@ -19,37 +19,37 @@
|
|
|
19
19
|
"rsbuild-plugin"
|
|
20
20
|
],
|
|
21
21
|
"imports": {
|
|
22
|
-
"#json5-loader": "./dist/json5-loader.
|
|
22
|
+
"#json5-loader": "./dist/json5-loader.mjs"
|
|
23
23
|
},
|
|
24
24
|
"exports": {
|
|
25
25
|
".": {
|
|
26
26
|
"import": {
|
|
27
|
-
"types": "./dist/index.d.
|
|
28
|
-
"default": "./dist/index.
|
|
27
|
+
"types": "./dist/index.d.ts",
|
|
28
|
+
"default": "./dist/index.js"
|
|
29
29
|
}
|
|
30
30
|
},
|
|
31
31
|
"./server": {
|
|
32
32
|
"import": {
|
|
33
|
-
"types": "./dist/server.d.
|
|
34
|
-
"default": "./dist/server.
|
|
33
|
+
"types": "./dist/server.d.ts",
|
|
34
|
+
"default": "./dist/server.js"
|
|
35
35
|
}
|
|
36
36
|
},
|
|
37
37
|
"./rsbuild": {
|
|
38
38
|
"import": {
|
|
39
|
-
"types": "./dist/rsbuild.d.
|
|
40
|
-
"default": "./dist/rsbuild.
|
|
39
|
+
"types": "./dist/rsbuild.d.ts",
|
|
40
|
+
"default": "./dist/rsbuild.js"
|
|
41
41
|
}
|
|
42
42
|
},
|
|
43
43
|
"./helper": {
|
|
44
44
|
"import": {
|
|
45
|
-
"types": "./dist/helper.d.
|
|
46
|
-
"default": "./dist/helper.
|
|
45
|
+
"types": "./dist/helper.d.ts",
|
|
46
|
+
"default": "./dist/helper.js"
|
|
47
47
|
}
|
|
48
48
|
},
|
|
49
49
|
"./package.json": "./package.json"
|
|
50
50
|
},
|
|
51
|
-
"main": "dist/index.
|
|
52
|
-
"types": "dist/index.d.
|
|
51
|
+
"main": "dist/index.js",
|
|
52
|
+
"types": "dist/index.d.ts",
|
|
53
53
|
"files": [
|
|
54
54
|
"dist"
|
|
55
55
|
],
|
|
@@ -58,8 +58,8 @@
|
|
|
58
58
|
"pnpm": ">=9"
|
|
59
59
|
},
|
|
60
60
|
"peerDependencies": {
|
|
61
|
-
"@rsbuild/core": ">=
|
|
62
|
-
"@rspack/core": ">=
|
|
61
|
+
"@rsbuild/core": ">=2.0.0",
|
|
62
|
+
"@rspack/core": ">=2.0.0"
|
|
63
63
|
},
|
|
64
64
|
"peerDependenciesMeta": {
|
|
65
65
|
"@rsbuild/core": {
|
|
@@ -70,45 +70,44 @@
|
|
|
70
70
|
}
|
|
71
71
|
},
|
|
72
72
|
"dependencies": {
|
|
73
|
-
"@pengzhanbo/utils": "^
|
|
73
|
+
"@pengzhanbo/utils": "^3.6.0",
|
|
74
74
|
"ansis": "^4.2.0",
|
|
75
75
|
"chokidar": "^5.0.0",
|
|
76
76
|
"co-body": "^6.2.0",
|
|
77
|
-
"cors": "^2.8.
|
|
77
|
+
"cors": "^2.8.6",
|
|
78
78
|
"debug": "^4.4.3",
|
|
79
79
|
"formidable": "^3.5.4",
|
|
80
80
|
"http-status": "^2.1.0",
|
|
81
81
|
"is-core-module": "^2.16.1",
|
|
82
82
|
"json5": "^2.2.3",
|
|
83
83
|
"local-pkg": "^1.1.2",
|
|
84
|
-
"memfs": "^4.
|
|
84
|
+
"memfs": "^4.57.2",
|
|
85
85
|
"mime-types": "^3.0.2",
|
|
86
|
-
"path-to-regexp": "^8.
|
|
87
|
-
"picomatch": "^4.0.
|
|
88
|
-
"
|
|
89
|
-
"
|
|
90
|
-
"ws": "^8.18.3"
|
|
86
|
+
"path-to-regexp": "^8.4.2",
|
|
87
|
+
"picomatch": "^4.0.4",
|
|
88
|
+
"tinyglobby": "^0.2.16",
|
|
89
|
+
"ws": "^8.20.0"
|
|
91
90
|
},
|
|
92
91
|
"devDependencies": {
|
|
93
|
-
"@pengzhanbo/eslint-config": "^
|
|
94
|
-
"@rsbuild/core": "^
|
|
95
|
-
"@rspack/core": "^
|
|
92
|
+
"@pengzhanbo/eslint-config": "^2.4.0",
|
|
93
|
+
"@rsbuild/core": "^2.0.3",
|
|
94
|
+
"@rspack/core": "^2.0.1",
|
|
96
95
|
"@types/co-body": "^6.1.3",
|
|
97
96
|
"@types/cors": "^2.8.19",
|
|
98
|
-
"@types/debug": "^4.1.
|
|
99
|
-
"@types/formidable": "^3.
|
|
97
|
+
"@types/debug": "^4.1.13",
|
|
98
|
+
"@types/formidable": "^3.5.1",
|
|
100
99
|
"@types/is-core-module": "^2.2.2",
|
|
101
100
|
"@types/mime-types": "^3.0.1",
|
|
102
|
-
"@types/node": "^25.0
|
|
103
|
-
"@types/picomatch": "^4.0.
|
|
101
|
+
"@types/node": "^25.6.0",
|
|
102
|
+
"@types/picomatch": "^4.0.3",
|
|
104
103
|
"@types/ws": "^8.18.1",
|
|
105
|
-
"bumpp": "^
|
|
104
|
+
"bumpp": "^11.0.1",
|
|
106
105
|
"conventional-changelog-cli": "^5.0.0",
|
|
107
|
-
"eslint": "^
|
|
106
|
+
"eslint": "^10.3.0",
|
|
108
107
|
"husky": "^9.1.7",
|
|
109
|
-
"lint-staged": "^16.
|
|
110
|
-
"tsdown": "^0.
|
|
111
|
-
"typescript": "^
|
|
108
|
+
"lint-staged": "^16.4.0",
|
|
109
|
+
"tsdown": "^0.21.10",
|
|
110
|
+
"typescript": "^6.0.3"
|
|
112
111
|
},
|
|
113
112
|
"lint-staged": {
|
|
114
113
|
"*": "eslint --fix"
|
package/dist/helper.mjs
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import{Transform as e}from"node:stream";import{deepClone as t,deepEqual as n,isArray as r,isFunction as i}from"@pengzhanbo/utils";var a=class extends e{constructor(e){super({objectMode:!0}),e.socket.setKeepAlive(!0),e.socket.setNoDelay(!0),e.socket.setTimeout(0)}pipe(e,t){return e.writeHead&&(e.writeHead(200,{"Content-Type":`text/event-stream; charset=utf-8`,"Transfer-Encoding":`identity`,"Cache-Control":`no-cache`,Connection:`keep-alive`}),e.flushHeaders?.()),e.write(`:ok
|
|
2
|
-
|
|
3
|
-
`),super.pipe(e,t)}_transform(e,t,n){e.comment&&this.push(`: ${e.comment}\n`),e.event&&this.push(`event: ${e.event}\n`),e.id&&this.push(`id: ${e.id}\n`),e.retry&&this.push(`retry: ${e.retry}\n`),e.data&&this.push(o(e.data)),this.push(`
|
|
4
|
-
`),n()}write(e,...t){return super.write(e,...t)}destroy(e){return e&&this.write({event:`error`,data:e.message}),this.end(),this}};function o(e){return typeof e==`object`?o(JSON.stringify(e)):e.split(/\r\n|\r|\n/).map(e=>`data: ${e}\n`).join(``)}function s(e,t){let n=new a(e);return n.pipe(t),n}function c(e){return e}function l(e){return t=>(t=r(t)?t.map(t=>e(t)||t):e(t)||t,t)}const u=new Map,d=new WeakMap;var f=class{value;#e;#t;constructor(e){this.value=e,this.#e=t(e),this.#t=Date.now()}hotUpdate(e){Date.now()-this.#t<70||n(e,this.#e)||(this.value=e,this.#e=t(e),this.#t=Date.now())}};function p(e,t){let n=u.get(e);if(!n){let r=new f(t),i=u.get(e);i?n=i:(u.set(e,r),n=r)}if(n.hotUpdate(t),d.has(n))return d.get(n);let r=[()=>n.value,e=>{i(e)&&(e=e(n.value)??n.value),n.value=e}];return Object.defineProperty(r,`value`,{get(){return n.value},set(e){n.value=e}}),d.set(n,r),r}export{l as createDefineMock,s as createSSEStream,c as defineMock,p as defineMockData};
|
package/dist/index.mjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{createDefineMock as e,createSSEStream as t,defineMock as n,defineMockData as r}from"./helper.mjs";import{a as i,d as a,f as o,i as s,n as c,o as l,r as u,s as d,t as f}from"./ws-BM06pHhL.mjs";import{i as p,n as m,r as h,t as g}from"./options-BUfaThYe.mjs";import"./server.mjs";import{isString as _,toArray as v}from"@pengzhanbo/utils";import y from"node:path";import b from"node:process";import x from"@rspack/core";const S=`rspack-plugin-mock`;var C=class{constructor(e={}){this.options=e}apply(e){let t=e.options,n=w(e,this.options);if(b.env.NODE_ENV!==`production`){let r=p(n),i=m(r,n),a=t.devServer?.setupMiddlewares,o=d(e=>{f(r,e,n)});t.devServer={...t.devServer,setupMiddlewares:(e,t)=>(e=a?.(e,t)||e,e=i(e,()=>{t.webSocketServer?.clients&&t.sendMessage(t.webSocketServer.clients,`static-changed`)})||e,o(()=>t.server),e)};let s=v(n.wsPrefix);if(t.devServer?.proxy?.length){let e=t.devServer.proxy;t.devServer.proxy=e.filter(e=>typeof e!=`function`&&e.ws===!0&&s.length?!v(e.context).filter(_).some(e=>s.includes(e)):!0).map(e=>{if(typeof e!=`function`&&!e.ws){let t=e.onProxyReq;e.onProxyReq=(e,n,...r)=>{t?.(e,n,...r),u(e,n)}}return e})}e.hooks.watchRun.tap(S,()=>r.run()),e.hooks.watchClose.tap(S,()=>r.close())}else n.build!==!1&&e.hooks.afterEmit.tap(S,()=>h(n,t.output.path||y.resolve(b.cwd(),`dist`)))}};function w(e,t={}){let n=e.options,r=n.resolve?.alias||{},i=n.context,a=n.plugins?.find(e=>e instanceof x.DefinePlugin),o=(n.devServer?.proxy||[]).flatMap(e=>typeof e!=`function`&&e.context&&!e.ws?e.context:[]);return g(t,{alias:r,context:i,plugins:v(a),proxies:o})}export{C as MockServerPlugin,c as baseMiddleware,e as createDefineMock,a as createLogger,t as createSSEStream,n as defineMock,r as defineMockData,o as logLevels,f as mockWebSocket,s as processMockData,i as processRawData,l as sortByValidator};
|
package/dist/json5-loader.cjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,a)=>(a=n==null?{}:e(i(n)),o(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));let c=require(`json5`);c=s(c),module.exports=function(e){return e?`export default ${JSON.stringify(c.default.parse(e))}`:`export default {}`};
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import{_ as e,a as t,c as n,d as r,g as i,h as a,i as o,l as s,m as c,n as l,p as u,u as d}from"./ws-BM06pHhL.mjs";import{createRequire as f}from"node:module";import{isBoolean as p,toArray as m,uniq as h}from"@pengzhanbo/utils";import g from"node:path";import _ from"node:process";import*as v from"@rspack/core";import y,{promises as b}from"node:fs";import x from"node:fs/promises";import S from"ansis";import{glob as C}from"tinyglobby";import w from"is-core-module";import{loadPackageJSONSync as T}from"local-pkg";import{pathToFileURL as E}from"node:url";import D from"node:events";import O from"chokidar";import k from"cors";const A=f(import.meta.url);function j(e,t){let n=P(e),r=n.watch===!0;async function i(n,i){let a=`[rspack:mock]`,o=(...e)=>{i?i.compilation.getLogger(a).error(...e):console.error(S.red(a),...e)};if(n){o(n.stack||n),`details`in n&&o(n.details);return}i?.hasErrors()&&o(i.toJson().errors);let s=d.readFileSync(`/output.js`,`utf-8`),c=[];if(!r){let t=i?.toJson().modules||[],n=Object.keys(e.alias||{}).map(e=>e.replace(/\$$/g,``));for(let{name:e}of t)if(e?.startsWith(`external`)){let t=N(e);!w(t)&&!n.includes(t)&&c.push(N(e))}}await t({code:s,externals:c})}let a=v.rspack(n);return a.outputFileSystem=d,r?a.watch({},i):a.run(async(...e)=>{await i(...e),a.close(()=>{})}),a}function M(e){return new Promise(t=>{j({...e,watch:!1},e=>{t(e)})})}function N(e){let t=e.replace(`external `,``).slice(1,-1),[n,r]=t.split(`/`);return t[0]===`@`?`${n}/${r}`:n}function P({cwd:e,isEsm:t=!0,entryFile:n,plugins:r,alias:i,watch:a=!1}){let o=[`node >= 18.0.0`];i&&`@swc/helpers`in i&&delete i[`@swc/helpers`];let s=c(e),l=RegExp(`^(${s.join(`|`)})($|/)`,`i`);return{mode:`production`,context:e,entry:n,watch:a,target:`node${(_.versions.node||``).replace(/\.\d+$/,``)}`,externalsType:t?`module`:`commonjs2`,externals:[l],resolve:{alias:i,extensions:[`.js`,`.ts`,`.cjs`,`.mjs`,`.json5`,`.json`]},plugins:r,output:{library:{type:t?`module`:`commonjs2`},filename:`output.js`,module:t,path:`/`},experiments:{outputModule:t},optimization:{minimize:!a},node:{__dirname:!1,__filename:!1},module:{rules:[{test:/\.json5?$/,loader:A.resolve(`#json5-loader`),type:`javascript/auto`},{test:/\.[cm]?js$/,use:[{loader:`builtin:swc-loader`,options:{jsc:{parser:{syntax:`ecmascript`}},env:{targets:o}}}]},{test:/\.[cm]?ts$/,use:[{loader:`builtin:swc-loader`,options:{jsc:{parser:{syntax:`typescript`}},env:{targets:o}}}]}]}}}async function F({filepath:e,code:t,isESM:n,cwd:r}){e=g.resolve(r,e);let i=n?`.mjs`:`.cjs`,a=`${e}.timestamp-${Date.now()}${i}`,o=E(a).toString();await b.writeFile(a,t,`utf8`);try{let e=await import(o);return e.default||e}finally{try{y.unlinkSync(a)}catch{}}}function I(e){return new L(e)}var L=class extends D{cwd;mockWatcher;entryFile;deps=[];isESM=!1;_mockData={};watchInfo;compiler;constructor(e){super(),this.options=e,this.cwd=e.cwd||_.cwd();try{this.isESM=T(this.cwd)?.type===`module`}catch{}this.entryFile=g.resolve(_.cwd(),`node_modules/.cache/mock-server/mock-server.ts`)}get mockData(){return this._mockData}async run(){let{include:n,exclude:r}=this.options,{pattern:i,ignore:a,isMatch:c}=e(n,r);this.deps=(await C(i,{ignore:a,cwd:g.join(this.cwd,this.options.dir)})).map(e=>s(e)),this.updateMockEntry(),this.watchMockFiles(c);let{plugins:l,alias:u}=this.options;this.compiler=j({isEsm:this.isESM,cwd:this.cwd,plugins:l,entryFile:this.entryFile,alias:u,watch:!0},async({code:e})=>{try{this._mockData=o(t(await F({filepath:`mock.bundle.js`,code:e,isESM:this.isESM,cwd:this.cwd}))),this.emit(`update`,this.watchInfo||{})}catch(e){this.options.logger.error(e.stack||e.message)}})}close(){this.mockWatcher.close(),this.compiler?.close(()=>{}),this.emit(`close`)}updateAlias(e){this.options.alias={...this.options.alias,...e}}async updateMockEntry(){await H(this.entryFile,this.deps,this.cwd,this.options.dir)}watchMockFiles(e){let t=this.mockWatcher=O.watch(this.options.dir,{ignoreInitial:!0,cwd:this.cwd,ignored:(t,n)=>t.includes(`node_modules`)?!0:!!n?.isFile()&&!e(t)});t.on(`add`,t=>{t=s(t),e(t)&&(this.watchInfo={filepath:t,type:`add`},this.deps=h([...this.deps,t]),this.updateMockEntry())}),t.on(`change`,t=>{t=s(t),e(t)&&(this.watchInfo={filepath:t,type:`change`})}),t.on(`unlink`,async t=>{t=s(t),e(t)&&(this.watchInfo={filepath:t,type:`unlink`},this.deps=this.deps.filter(e=>e!==t),this.updateMockEntry())})}},R=`rspack-plugin-mock`,z=`1.3.0`;function B(e,t){let n=a(e.context),r=[R,`connect`,`cors`],i={name:`mock-server`,type:`module`,scripts:{start:`node index.js`},dependencies:{connect:`^3.7.0`,[R]:`^${z}`,cors:`^2.8.5`}};return t.filter(e=>!r.includes(e)).forEach(e=>{i.dependencies[e]=n[e]||`latest`}),JSON.stringify(i,null,2)}function V({proxies:e,wsPrefix:t,cookiesOptions:n,bodyParserOptions:r,priority:i,build:a}){let{serverPort:o,log:s}=a;return`import { createServer } from 'node:http';
|
|
2
|
-
import connect from 'connect';
|
|
3
|
-
import corsMiddleware from 'cors';
|
|
4
|
-
import {
|
|
5
|
-
baseMiddleware,
|
|
6
|
-
createLogger,
|
|
7
|
-
mockWebSocket,
|
|
8
|
-
processMockData,
|
|
9
|
-
processRawData
|
|
10
|
-
} from 'rspack-plugin-mock/server';
|
|
11
|
-
import rawData from './mock-data.js';
|
|
12
|
-
|
|
13
|
-
const app = connect();
|
|
14
|
-
const server = createServer(app);
|
|
15
|
-
const logger = createLogger('mock-server', '${s}');
|
|
16
|
-
const proxies = ${JSON.stringify(e)};
|
|
17
|
-
const wsProxies = ${JSON.stringify(m(t))};
|
|
18
|
-
const cookiesOptions = ${JSON.stringify(n)};
|
|
19
|
-
const bodyParserOptions = ${JSON.stringify(r)};
|
|
20
|
-
const priority = ${JSON.stringify(i)};
|
|
21
|
-
const mockConfig = {
|
|
22
|
-
mockData: processMockData(processRawData(rawData)),
|
|
23
|
-
on: () => {},
|
|
24
|
-
};
|
|
25
|
-
|
|
26
|
-
mockWebSocket(mockConfig, server, { wsProxies, cookiesOptions, logger });
|
|
27
|
-
|
|
28
|
-
app.use(corsMiddleware());
|
|
29
|
-
app.use(baseMiddleware(mockConfig, {
|
|
30
|
-
formidableOptions: { multiples: true },
|
|
31
|
-
proxies,
|
|
32
|
-
priority,
|
|
33
|
-
cookiesOptions,
|
|
34
|
-
bodyParserOptions,
|
|
35
|
-
logger,
|
|
36
|
-
}));
|
|
37
|
-
|
|
38
|
-
server.listen(${o});
|
|
39
|
-
|
|
40
|
-
console.log('listen: http://localhost:${o}');
|
|
41
|
-
`}async function H(e,t,n,r){let i=[],a=[];for(let[e,o]of t.entries()){let t=s(g.join(r,o)),c=s(g.join(n,t));i.push(`import * as m${e} from '${c}'`),a.push(`[m${e}, '${t}']`)}let o=`${i.join(`
|
|
42
|
-
`)}\n\nexport default [\n ${a.join(`,
|
|
43
|
-
`)}\n]`,c=g.dirname(e);y.existsSync(c)||await x.mkdir(c,{recursive:!0}),await x.writeFile(e,o,`utf8`)}async function U(t,n){let r=g.resolve(_.cwd(),`node_modules/.cache/mock-server/mock-server.ts`),{pattern:i,ignore:a}=e(t.include,t.exclude);await H(r,await C(i,{ignore:a,cwd:g.join(t.cwd,t.dir)}),t.cwd,t.dir);let{code:o,externals:s}=await M({entryFile:r,cwd:t.cwd,plugins:t.plugins,alias:t.alias});await x.unlink(r);let c=[{filename:`mock-data.js`,source:o},{filename:`index.js`,source:V(t)},{filename:`package.json`,source:B(t,s)}],l=g.resolve(n,t.build.dist);t.logger.info(`${S.green(`✓`)} generate mock server in ${S.cyan(g.relative(_.cwd(),l))}`),y.existsSync(l)||await x.mkdir(l,{recursive:!0});for(let{filename:e,source:n}of c){await x.writeFile(g.join(l,e),n,`utf8`);let r=(n.length/1024).toFixed(2),i=e.length<24?` `.repeat(24-e.length):``;t.logger.info(` ${S.green(e)}${i}${S.bold.dim(`${r} kB`)}`)}}function W(e,t){let r={},a=t.cors!==!1;a&&(r={...r,...typeof t.cors==`boolean`?{}:t.cors});let o=t.proxies;return a?function(t,a,s){let{pathname:c}=n(t.url);if(!c||o.length===0||!o.some(e=>i(e,t.url,t)))return s();let l=e.mockData;if(!Object.keys(l).find(e=>u(e,c)))return s();k(r)(t,a,s)}:void 0}function G(e,t){return function(n,r){n.unshift(l(e,t));let i=W(e,t);return i&&n.unshift(i),t.reload&&e.on(`update`,()=>r?.()),n}}function K({prefix:e=[],wsPrefix:t=[],cwd:n,dir:i=`mock`,include:a=[`**/*.mock.{js,ts,cjs,mjs,json,json5}`],exclude:o=[],reload:s=!1,log:c=`info`,cors:l=!0,formidableOptions:u={},build:d=!1,cookiesOptions:f={},bodyParserOptions:h={},priority:g={}},{alias:v,context:y,plugins:b,proxies:x}){let C=r(`rspack:mock`,p(c)?c?`info`:`error`:c),w=[...m(e),...x],T=m(t);return!w.length&&!T.length&&C.warn(`No proxy was configured, mock server will not work. See ${S.cyan(`https://vite-plugin-mock-dev-server.netlify.app/guide/usage`)}`),{prefix:e,wsPrefix:t,cwd:n||y||_.cwd(),dir:i,include:a,exclude:o,reload:s,cors:l,cookiesOptions:f,log:c,formidableOptions:{multiples:!0,...u},bodyParserOptions:h,priority:g,build:d?{serverPort:8080,dist:`mockServer`,log:`error`,...typeof d==`object`?d:{}}:!1,alias:v,plugins:b,proxies:w,wsProxies:T,logger:C}}export{I as i,G as n,U as r,K as t};
|
package/dist/rsbuild.mjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as e,t}from"./ws-BM06pHhL.mjs";import{i as n,n as r,r as i,t as a}from"./options-BUfaThYe.mjs";import{isArray as o,toArray as s}from"@pengzhanbo/utils";import c from"node:path";import l from"node:process";import u from"@rspack/core";import d from"ansis";import{createServer as f}from"node:http";import{getPortPromise as p}from"portfinder";function m(e={}){return{name:`plugin-mock-server`,setup(o){let d=o.getRsbuildConfig(),m=a(e,{proxies:v(d),alias:{},context:o.context.rootPath,plugins:[new u.DefinePlugin(d.source?.define||{})]});if(l.env.NODE_ENV===`production`){m.build&&o.onAfterBuild(async()=>{let e=o.getNormalizedConfig();await i(m,c.resolve(l.cwd(),e.output.distPath.root||`dist`))});return}let h=n(m);o.modifyRsbuildConfig(e=>{g(e);let t=r(h,m);e.dev??={},e.dev.setupMiddlewares=s(e.dev.setupMiddlewares),e.dev.setupMiddlewares.push((e,n)=>{t(e,()=>n.sockWrite(`static-changed`))})});let y=3079,b=s(m.wsPrefix).length>0;b&&o.modifyRsbuildConfig(async t=>{y=await p({port:(t.server?.port||y)+1}),_(t,e.wsPrefix||[],y)});let x;function S(){h.run(),b&&(x=f(),t(h,x,m),x.listen(y))}function C(){h.close(),x?.close()}o.onAfterCreateCompiler(({compiler:e})=>{`compilers`in e?e.compilers.forEach(e=>{h.updateAlias(e.options.resolve?.alias||{})}):h.updateAlias(e.options.resolve?.alias||{})}),o.onAfterStartDevServer(S),o.onAfterStartProdServer(S),o.onExit(C)}}}function h(e,t,n){console.error(d.red(e?.stack||e.message)),n.statusCode=500,n.end()}function g(t){if(t.server?.proxy){if(o(t.server.proxy))t.server.proxy=t.server.proxy.map(t=>{if(typeof t!=`function`&&!t.ws){let n=t.onProxyReq,r=t.onError;return{...t,onError:r||h,onProxyReq:(t,r,...i)=>{n?.(t,r,...i),e(t,r)}}}return t});else if(`target`in t.server.proxy){let n=t.server.proxy.onProxyReq;t.server.proxy.onProxyReq=(t,r,...i)=>{n?.(t,r,...i),e(t,r)},t.server.proxy.onError??=h}else if(t.server.proxy){let n=t.server.proxy;Object.keys(n).forEach(t=>{let r=n[t],i=typeof r==`string`?{target:r}:r;if(i.ws)return;let{onProxyReq:a,onError:o,...s}=i;n[t]={...s,onProxyReq:(t,n,...r)=>{a?.(t,n,...r),e(t,n)},onError:o||h}})}}}function _(e,t,n){e.server??={};let r=e.server.proxy??={},i=`ws://localhost:${n}`,a=s(t),c=e=>typeof e==`string`&&a.includes(e),l=new Set;function u(e){o(e.context)?e.context=e.context.filter(c):c(e.context)&&(l.add(e.context),e.target=i)}if(o(r)){for(let e of r)typeof e!=`function`&&e.context&&e.ws&&u(e);a.filter(e=>!l.has(e)).forEach(e=>r.push({context:e,target:i}))}else if(`target`in r){if(r.ws){u(r);let t=e.server.proxy=[r];a.filter(e=>!l.has(e)).forEach(e=>t.push({context:e,target:i}))}}else Object.entries(r).forEach(([,e])=>{typeof e!=`string`&&e.ws&&u(e)}),a.filter(e=>!l.has(e)).forEach(e=>{r[e]={target:i,ws:!0}})}function v(e){e.server??={};let t=e.server.proxy??={},n=[];if(o(t))for(let e of t)typeof e!=`function`&&e.context&&!e.ws&&n.push(...s(e.context));else `target`in t?t.ws||n.push(...s(t.context)):Object.entries(t).forEach(([e,t])=>{(typeof t==`string`||!t.ws)&&n.push(e)});return n}export{m as pluginMockServer};
|
package/dist/server.mjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as e,d as t,f as n,i as r,n as i,o as a,t as o}from"./ws-BM06pHhL.mjs";export{i as baseMiddleware,t as createLogger,n as logLevels,o as mockWebSocket,r as processMockData,e as processRawData,a as sortByValidator};
|
package/dist/ws-BM06pHhL.mjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{isArray as e,isBoolean as t,isEmptyObject as n,isFunction as r,isPlainObject as i,random as a,sleep as o,sortBy as s,timestamp as c,toArray as l,uniq as u}from"@pengzhanbo/utils";import d from"node:path";import f from"ansis";import p from"picomatch";import{loadPackageJSONSync as m}from"local-pkg";import{match as h,parse as g,pathToRegexp as _}from"path-to-regexp";import v from"node:os";import{fileURLToPath as y}from"node:url";import b from"debug";import{Volume as x,createFsFromVolume as S}from"memfs";import{parse as C}from"node:querystring";import w from"co-body";import T from"formidable";import E from"node:http";import D from"node:crypto";import{Buffer as O}from"node:buffer";import k from"http-status";import*as A from"mime-types";import{WebSocketServer as j}from"ws";function ee(e,t){let n=[],r=[`**/node_modules/**`,...l(t)];return l(e).forEach(e=>{e[0]===`!`?r.push(e.slice(1)):n.push(e)}),{pattern:n,ignore:r,isMatch:p(n,{ignore:r})}}function M(e,t,n){return typeof e==`function`?e(t,n):e[0]===`^`&&new RegExp(e).test(t)||t.startsWith(e)}function N(e){let{dependencies:t,devDependencies:n,peerDependencies:r,optionalDependencies:i}=m(e)||{};return{...t,...n,...r,...i}}function P(e){let t=N(e);return u(Object.keys(t))}function te(e){return typeof e==`object`&&!!e&&typeof e.pipe==`function`}function ne(e){return te(e)&&e.readable!==!1&&typeof e._read==`function`&&typeof e._readableState==`object`}function F(e,t){if(!t)return!0;for(let n in t)if(!I(e[n],t[n]))return!1;return!0}function I(t,n){if(e(t)&&e(n)){let e=new Set;return n.every(n=>t.some((t,r)=>{if(e.has(r))return!1;let i=I(t,n);return i&&e.add(r),i}))}return i(t)&&i(n)?F(t,n):Object.is(t,n)}const L=new Map;function R(e,t){let n=L.get(e);return n||(n=_(e).regexp,L.set(e,n)),n.test(t)}const z={silent:0,error:1,warn:2,info:3,debug:4};function re(e,n=`info`){e=`[${e}]`;function r(r,i,a){if(a=t(a)?a?n:`error`:a,z[a]>=z[r]){let t=r===`info`||r===`debug`?`log`:r,n=r===`debug`?f.magenta.bold(e):r===`info`?f.cyan.bold(e):r===`warn`?f.yellow.bold(e):f.red.bold(e),a=`${f.dim(new Date().toLocaleTimeString())} ${n} ${i}`;console[t](a)}}return{debug(e,t=n){r(`debug`,e,t)},info(e,t=n){r(`info`,e,t)},warn(e,t=n){r(`warn`,e,t)},error(e,t=n){r(`error`,e,t)}}}ae(import.meta.url);const ie=S(new x);function ae(e){return d.dirname(y(e))}b(`vite:mock-dev-server`);const oe=/\\/g,se=v.platform()===`win32`;function ce(e){return e.replace(oe,`/`)}function le(e){return d.posix.normalize(se?ce(e):e)}function B(e){let t=new URL(e,`http://example.com`);return{pathname:decodeURIComponent(t.pathname),query:C(t.search.replace(/^\?/,``))}}function ue(e,t=5){return function n(r,i=0){let a=r();a?e(a):i<t&&setTimeout(()=>n(r,i+1),100)}}function de(e){return e.filter(e=>e[0]).map(([e,t])=>{let n;return e.default?n=Array.isArray(e.default)?e.default.map(e=>({...e,__filepath__:t})):{...e.default,__filepath__:t}:`url`in e?n={...e,__filepath__:t}:(n=[],Object.keys(e||{}).forEach(r=>{Array.isArray(e[r])?n.push(...e[r].map(e=>({...e,__filepath__:t}))):n.push({...e[r],__filepath__:t})})),n})}function fe(e){let t=[];for(let[,n]of e.entries())n&&t.push(...l(n));let a={};return t.filter(e=>i(e)&&e.enabled!==!1&&e.url).forEach(e=>{let{pathname:t,query:i}=B(e.url),o=a[t]??=[],s={...e,url:t};if(s.ws!==!0){let e=s.validator;n(i)||(r(e)?s.validator=function(t){return F(t.query,i)&&e(t)}:e?(s.validator={...e},s.validator.query=s.validator.query?{...i,...s.validator.query}:i):s.validator={query:i})}o.push(s)}),Object.keys(a).forEach(e=>{a[e]=V(a[e])}),a}function V(e){return s(e,e=>{if(e.ws===!0)return 0;let{validator:t}=e;return!t||n(t)?2:r(t)?0:1/Object.keys(t).reduce((e,n)=>e+pe(t[n]),0)})}function pe(e){return e?Object.keys(e).length:0}async function me(e,t,n={}){let r=e.method.toUpperCase();if([`HEAD`,`OPTIONS`].includes(r))return;let i=e.headers[`content-type`]?.toLocaleLowerCase()||``,{limit:a,formLimit:o,jsonLimit:s,textLimit:c,...l}=n;try{if(i.startsWith(`application/json`))return await w.json(e,{limit:s||a,...l});if(i.startsWith(`application/x-www-form-urlencoded`))return await w.form(e,{limit:o||a,...l});if(i.startsWith(`text/plain`))return await w.text(e,{limit:c||a,...l});if(i.startsWith(`multipart/form-data`))return await ge(e,t)}catch(e){console.error(e)}}const he={keepExtensions:!0,filename(e,t,n){return n?.originalFilename||`${e}.${Date.now()}${t?`.${t}`:``}`}};async function ge(e,t){let n=T({...he,...t});return new Promise((t,r)=>{n.parse(e,(e,n,i)=>{if(e){r(e);return}t({...n,...i})})})}const H=new Map;function U(e,t){let n=H.get(e);n||(n=h(e,{decode:decodeURIComponent}),H.set(e,n));let r=n(t);return r?r.params:{}}function _e(e,t){return F(e.headers,t.headers)&&F(e.body,t.body)&&F(e.params,t.params)&&F(e.query,t.query)&&F(e.refererQuery,t.refererQuery)}function W(e,t){return!t||n(t)?``:` ${f.gray(`${e}:`)}${JSON.stringify(t)}`}function ve(e,t){let{url:n,method:r,query:i,params:a,body:o}=e,{pathname:s}=new URL(n,`http://example.com`);s=f.green(decodeURIComponent(s));let c=f.magenta.bold(r),l=W(`query`,i),u=W(`params`,a),d=W(`body`,o),p=` ${f.dim.underline(`(${t})`)}`;return`${c} ${s}${l}${u}${d}${p}`}function ye(t,n,{pathname:i,method:a,request:o}){return t.find(t=>{if(!i||!t||!t.url||t.ws||!(t.method?e(t.method)?t.method:[t.method]:[`GET`,`POST`]).includes(a))return!1;let s=R(t.url,i);if(s&&t.validator){let e=U(t.url,i);if(r(t.validator))return t.validator({params:e,...o});try{return _e({params:e,...o},t.validator)}catch(e){let r=t.__filepath__;return n.error(`${f.red(`mock error at ${i}`)}\n${e}\n at validator (${f.underline(r)})`,t.log),!1}}return s})}const G=/^[\t\u0020-\u007E\u0080-\u00FF]+$/,be=/^(?:low|medium|high)$/i,K=Object.create(null),xe=/[\^$\\.*+?()[\]{}|]/g,Se=/[;=]/,Ce=/;/,we=/^(?:lax|none|strict)$/i;var Te=class{name;value;maxAge;expires;path=`/`;domain;secure=!1;httpOnly=!0;sameSite=!1;overwrite=!1;priority;partitioned;constructor(e,t,n={}){if(!G.test(e)||Se.test(e))throw TypeError(`argument name is invalid`);if(t&&(!G.test(t)||Ce.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&&!G.test(this.path))throw TypeError(`[Cookie] option path is invalid`);if(this.domain&&!G.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&&!be.test(this.priority))throw TypeError(`[Cookie] option priority is invalid`);if(this.sameSite&&this.sameSite!==!0&&!we.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 Ee(e,t){if(e.length!==t.length)return!1;if(D.timingSafeEqual)return D.timingSafeEqual(e,t);for(let n=0;n<e.length;n++)if(e[n]!==t[n])return!1;return!0}function q(e,t){return D.createHmac(`sha256`,e).update(t).digest()}function De(e,t){let n=String(e),r=String(t),i=D.randomBytes(32);return Ee(q(i,n),q(i,r))&&e===t}const Oe=/[/+=]/g,ke={"/":`_`,"+":`-`,"=":``};var J=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 D.createHmac(this.algorithm,t).update(e).digest(this.encoding).replace(Oe,e=>ke[e])}index(e,t){for(let n=0,r=this.keys.length;n<r;n++)if(De(t,this.sign(e,this.keys[n])))return n;return-1}verify(e,t){return this.index(e,t)>-1}},Y=class{request;response;secure;keys;constructor(t,n,r={}){this.request=t,this.response=n,this.secure=r.secure,r.keys instanceof J?this.keys=r.keys:e(r.keys)&&(this.keys=new J(r.keys))}set(e,t,n){let r=this.request,i=this.response,a=l(i.getHeader(`Set-Cookie`)),o=new Te(e,t,n),s=n?.signed??!!this.keys,c=this.secure===void 0?r.protocol===`https`||je(r):!!this.secure;if(!c&&n?.secure)throw Error(`Cannot send secure cookie over unencrypted connection`);if(o.secure=n?.secure??c,Me(a,o),s&&n){if(!this.keys)throw Error(`.keys required for signed cookies`);o.value=this.keys.sign(o.toString()),o.name+=`.sig`,Me(a,o)}return(i.set?E.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(Ae(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 Ae(e){return K[e]||(K[e]=RegExp(`(?:^|;) *${e.replace(xe,`\\$&`)}=([^;]*)`)),K[e]}function je(e){return!!(e.socket?e.socket.encrypted:e.connection.encrypted)}function Me(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 X={};function Z(e){if(X[e])return X[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(g(e).tokens),X[e]=t,t}function Ne(e){let t=e.map(e=>Z(e).length);return t=t.length===0?[1]:t,Math.max(...t)+2}function Pe(e){let t=Z(e),n=0;for(let e=0;e<t.length;e++)t[e].type!==`text`&&(n+=10**(e+1)),n+=10**(e+1);return n}function Fe(e){let t=[],n=[];for(let t of e){let e=Z(t).filter(e=>e.type!==`text`).length;n[e]||(n[e]=[]),n[e].push(t)}for(let e of n.filter(e=>e&&e.length>0))t=[...t,...s(e,Pe).reverse()];return t}function Ie(e){let t=Ne(e);return s(e,e=>{let n=Z(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?1:0,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 Le(t,r,i){let a=Ie(Fe(t.filter(e=>R(e,r)))),{global:o=[],special:s={}}=i;if(o.length===0&&n(s)||a.length===0)return a;let[c,l]=Re(a),d=o.filter(e=>l.includes(e));if(d.length>0&&(a=u([...c,...d,...l])),n(s))return a;let f=Object.keys(s).filter(e=>a.includes(e))[0];if(!f)return a;let p=s[f],{rules:m,when:h}=e(p)?{rules:p,when:[]}:p;return m.includes(a[0])&&(h.length===0||h.some(e=>_(e).regexp.test(r)))&&(a=u([f,...a])),a}function Re(e){let t=[],n=[];for(let r of e)Z(r).filter(e=>e.type!==`text`).length>0?n.push(r):t.push(r);return[t,n]}const Q=new WeakMap;function ze(e){let t=[];e.addListener(`data`,e=>{t.push(O.from(e))}),e.addListener(`end`,()=>{t.length&&Q.set(e,O.concat(t))})}function Be(e,t){let n=Q.get(t);n&&(Q.delete(t),e.headersSent||e.setHeader(`Content-Length`,n.byteLength),e.writableEnded||e.write(n))}function Ve(e){return k[e]||`Unknown`}function $(e,t=200,n){e.statusCode=t,e.statusMessage=n||Ve(t)}async function He(e,t,n,i){let{headers:a,type:o=`json`}=n,s=n.__filepath__,c=A.contentType(o)||A.contentType(A.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)try{let n=r(a)?await a(e):a;Object.keys(n).forEach(e=>{t.setHeader(e,n[e])})}catch(t){i.error(`${f.red(`mock error at ${e.url.split(`?`)[0]}`)}\n${t}\n at headers (${f.underline(s)})`,n.log)}}async function Ue(t,n,i,a){let{cookies:o}=i,s=i.__filepath__;if(o)try{let i=r(o)?await o(t):o;Object.keys(i).forEach(t=>{let r=i[t];if(e(r)){let[e,i]=r;n.setCookie(t,e,i)}else n.setCookie(t,r)})}catch(e){a.error(`${f.red(`mock error at ${t.url.split(`?`)[0]}`)}\n${e}\n at cookies (${f.underline(s)})`,i.log)}}function We(e,t,n){if(ne(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 Ge(t,n){if(!n||typeof n==`number`&&n<=0||e(n)&&n.length!==2)return;let r=0;if(e(n)){let[e,t]=n;r=a(e,t)}else r=n-(c()-t);r>0&&await o(r)}function Ke(e,{formidableOptions:t={},bodyParserOptions:n={},proxies:i,cookiesOptions:a,logger:o,priority:s={}}){return async function(l,u,d){let p=c(),{query:m,pathname:h}=B(l.url);if(!h||i.length===0||!i.some(e=>M(e,l.url,l)))return d();let g=e.mockData,_=Le(Object.keys(g),h,s);if(_.length===0)return d();ze(l);let{query:v}=B(l.headers.referer||``),y=await me(l,t,n),b=new Y(l,u,a),x=b.get.bind(b),S=l.method.toUpperCase(),C,w;for(let e of _)if(C=ye(g[e],o,{pathname:h,method:S,request:{query:m,refererQuery:v,body:y,headers:l.headers,getCookie:x}}),C){w=e;break}if(!C){let e=_.map(e=>e===w?f.underline.bold(e):f.dim(e)).join(`, `);return o.warn(`${f.green(h)} matches ${e} , but mock data is not found.`),d()}let T=l,E=u;T.body=y,T.query=m,T.refererQuery=v,T.params=U(C.url,h),T.getCookie=x,E.setCookie=b.set.bind(b);let{body:D,delay:O,type:k=`json`,response:A,status:j=200,statusText:ee,log:N,__filepath__:P}=C;if($(E,j,ee),await He(T,E,C,o),await Ue(T,E,C,o),o.info(ve(T,P),N),o.debug(`${f.magenta(`DEBUG`)} ${f.underline(h)} matches: [ ${_.map(e=>e===w?f.underline.bold(e):f.dim(e)).join(`, `)} ]\n`),D){try{let e=r(D)?await D(T):D;await Ge(p,O),We(E,e,k)}catch(e){o.error(`${f.red(`mock error at ${h}`)}\n${e}\n at body (${f.underline(P)})`,N),$(E,500),u.end(``)}return}if(A){try{await Ge(p,O),await A(T,E,d)}catch(e){o.error(`${f.red(`mock error at ${h}`)}\n${e}\n at response (${f.underline(P)})`,N),$(E,500),u.end(``)}return}u.end(``)}}function qe(e,t,{wsProxies:n,cookiesOptions:r,logger:i}){let a=new Map,o=new Map,s=new WeakMap,c=e=>{let t=o.get(e);return t||o.set(e,t=new Map),t},l=(e,t)=>{let n=a.get(e);n||a.set(e,n=new Set),n.add(t)},u=(e,t,n,r,a,o)=>{try{n.setup?.(t,r),t.on(`close`,()=>e.delete(a)),t.on(`error`,e=>{i.error(`${f.red(`WebSocket mock error at ${t.path}`)}\n${e}\n at setup (${o})`,n.log)})}catch(e){i.error(`${f.red(`WebSocket mock error at ${t.path}`)}\n${e}\n at setup (${o})`,n.log)}},d=(e,t,n,r,i)=>{let{cleanupList:a,connectionList:o,context:c}=s.get(t);Xe(a),o.forEach(({ws:e})=>e.removeAllListeners()),t.removeAllListeners(),u(e,t,n,c,r,i),o.forEach(({ws:e,req:n})=>Ye(t,e,n,o))};e.on(`update`,({filepath:t})=>{if(!a.has(t))return;let n=a.get(t);if(n)for(let r of n.values())for(let n of e.mockData[r]){if(!n.ws||n.__filepath__!==t)return;let e=c(r);for(let[r,i]of e.entries())d(e,i,n,r,t)}}),t?.on(`upgrade`,(t,a,o)=>{let{pathname:d,query:p}=B(t.url);if(!d||n.length===0||!n.some(e=>M(e,t.url,t)))return;let m=e.mockData,h=Object.keys(m).find(e=>R(e,d));if(!h)return;let g=m[h].find(e=>e.url&&e.ws&&R(e.url,d));if(!g)return;let _=g.__filepath__;l(_,h);let v=c(h),y=Je(v,d),b=s.get(y);if(!b){let e=[],t={onCleanup:t=>e.push(t)};b={cleanupList:e,context:t,connectionList:[]},s.set(y,b),u(v,y,g,t,d,_)}let x=t,S=new Y(t,t,r),{query:C}=B(t.headers.referer||``);x.query=p,x.refererQuery=C,x.params=U(h,d),x.getCookie=S.get.bind(S),y.handleUpgrade(x,a,o,e=>{i.info(`${f.magenta(f.bold(`WebSocket`))} ${f.green(t.url)} connected ${f.dim(`(${_})`)}`,g.log),b.connectionList.push({req:x,ws:e}),Ye(y,e,x,b.connectionList)})}),t?.on(`close`,()=>{for(let e of o.values()){for(let t of e.values())Xe(s.get(t).cleanupList),t.close();e.clear()}o.clear(),a.clear()})}function Je(e,t){let n=e.get(t);return n||e.set(t,n=new j({noServer:!0})),n}function Ye(e,t,n,r){e.emit(`connection`,t,n),t.on(`close`,()=>{let e=r.findIndex(e=>e.ws===t);e!==-1&&r.splice(e,1)})}function Xe(e){let t;for(;t=e.shift();)t?.()}export{ee as _,de as a,B as c,re as d,z as f,M as g,N as h,fe as i,le as l,P as m,Ke as n,V as o,R as p,Be as r,ue as s,qe as t,ie as u};
|