@dbs-portal/tool-mock
Version:
API mocking toolkit using MSW for DBS Portal development workflows
188 lines (181 loc) • 4.79 kB
JavaScript
import { g as E } from "../environment-DlK8CH_m.js";
function m(t = {}) {
const {
enabled: r = !0,
mode: s = "development",
// publicDir = 'public', // Unused for now
serviceWorkerFilename: p = "mockServiceWorker.js",
// handlers = [], // Unused for now
autoSetup: g = !0,
verbose: d = !1,
config: v = {}
} = t;
let l = r, c = !1;
return {
name: "msw-plugin",
configResolved(e) {
c = e.command === "serve", !r && !c && (l = !1), d && console.log(`MSW Plugin: ${l ? "enabled" : "disabled"} (mode: ${s})`);
},
configureServer(e) {
!l || !c || (e.middlewares.use(`/${p}`, (n, o, f) => {
if (n.method === "GET") {
o.setHeader("Content-Type", "application/javascript"), o.setHeader("Service-Worker-Allowed", "/");
const a = S();
o.end(a);
} else
f();
}), e.middlewares.use((n, o, f) => {
if (n.url === "/" || n.url === "/index.html") {
const a = o.end;
o.end = function(i, u, k) {
if (typeof i == "string" && i.includes("<head>")) {
const w = b(v, g);
i = i.replace("<head>", `<head>${w}`);
}
return typeof u == "function" ? a.call(this, i, u) : u !== void 0 ? a.call(this, i, u, k) : a.call(this, i);
};
}
f();
}), d && console.log("MSW Plugin: Development server configured"));
},
generateBundle(e, n) {
if (l && e.format === "es") {
const o = S();
this.emitFile({
type: "asset",
fileName: p,
source: o
}), d && console.log("MSW Plugin: Service worker added to bundle");
}
},
transformIndexHtml: {
enforce: "pre",
transform(e, n) {
if (!l) return e;
if (n.bundle) {
const o = b(v, g);
return e.replace("<head>", `<head>${o}`);
}
return e;
}
},
handleHotUpdate(e) {
return !l || !c ? [] : e.file.includes("mock") || e.file.includes("handler") ? (d && console.log("MSW Plugin: Mock file changed, reloading handlers"), e.server.ws.send({
type: "full-reload"
}), []) : [];
}
};
}
function S() {
return `
/**
* Mock Service Worker
* Generated by @dbs-portal/tool-mock
*/
importScripts('https://unpkg.com/msw@2.6.4/lib/mockServiceWorker.js');
self.addEventListener('message', async function (event) {
const { type, payload } = event.data;
switch (type) {
case 'MOCK_ACTIVATE': {
self.registration.addEventListener('activate', () => {
event.ports[0].postMessage({ type: 'MOCK_ACTIVATED' });
});
break;
}
case 'MOCK_DEACTIVATE': {
await self.registration.unregister();
event.ports[0].postMessage({ type: 'MOCK_DEACTIVATED' });
break;
}
default: {
// Forward other messages to MSW
break;
}
}
});
`;
}
function b(t, r) {
return `
<script>
// MSW Setup Script
// Generated by @dbs-portal/tool-mock
window.__MSW_CONFIG__ = ${JSON.stringify(t)};
window.__MSW_AUTO_SETUP__ = ${r};
// Environment detection
const isDevelopment = import.meta.env.DEV;
const enableMocking = import.meta.env.VITE_ENABLE_MOCKING === 'true' || isDevelopment;
if (enableMocking && window.__MSW_AUTO_SETUP__) {
// Auto-setup will be handled by the application
console.log('MSW: Auto-setup enabled');
}
<\/script>
`;
}
function _(t = {}) {
const r = E(), s = {
enabled: r.shouldMock,
mode: r.mode === "disabled" ? "development" : r.mode,
publicDir: "public",
serviceWorkerFilename: "mockServiceWorker.js",
autoSetup: !0,
verbose: r.mode === "development",
config: {
delay: r.mode === "development" ? [100, 300] : 0,
logging: r.mode === "development",
errorSimulation: {
networkErrorRate: r.mode === "development" ? 0.01 : 0,
serverErrorRate: r.mode === "development" ? 5e-3 : 0
}
}
};
return m({
...s,
...t,
config: {
...s.config,
...t.config
}
});
}
function W(t = {}) {
return m({
enabled: !0,
mode: "storybook",
autoSetup: !0,
verbose: !1,
config: {
delay: [50, 150],
logging: !1,
errorSimulation: {
networkErrorRate: 0,
serverErrorRate: 0
}
},
...t
});
}
function y(t = {}) {
return m({
enabled: !0,
mode: "testing",
autoSetup: !0,
verbose: !1,
config: {
delay: 0,
logging: !1,
errorSimulation: {
networkErrorRate: 0,
serverErrorRate: 0
}
},
...t
});
}
export {
_ as createDBSPortalMSWPlugin,
m as mswPlugin,
W as mswStorybookPlugin,
y as mswTestingPlugin
};
//# sourceMappingURL=vite-plugin.js.map