@dbs-portal/tool-mock
Version:
API mocking toolkit using MSW for DBS Portal development workflows
715 lines (685 loc) • 17.4 kB
JavaScript
import { s as d } from "./setup-oE-TArFC.js";
async function w(e = {}) {
if (typeof window > "u" || !("serviceWorker" in navigator))
return console.warn("Service Worker not supported in this environment"), null;
const {
url: t = "/mockServiceWorker.js",
scope: n = "/",
updateViaCache: r = "none",
registrationOptions: a = {}
} = e;
try {
const o = await navigator.serviceWorker.register(t, {
scope: n,
updateViaCache: r,
...a
});
return console.log("MSW Service Worker registered:", o), o;
} catch (o) {
return console.error("Failed to register MSW Service Worker:", o), null;
}
}
async function S() {
if (typeof window > "u" || !("serviceWorker" in navigator))
return !1;
try {
return (await navigator.serviceWorker.ready).active !== null;
} catch {
return !1;
}
}
async function h() {
if (typeof window > "u" || !("serviceWorker" in navigator))
return null;
try {
const e = await navigator.serviceWorker.getRegistration();
return e ? (await e.update(), e) : null;
} catch (e) {
return console.error("Failed to update service worker:", e), null;
}
}
async function k() {
if (typeof window > "u" || !("serviceWorker" in navigator))
return !1;
try {
const e = await navigator.serviceWorker.getRegistration();
if (e) {
const t = await e.unregister();
return console.log("MSW Service Worker unregistered:", t), t;
}
return !0;
} catch (e) {
return console.error("Failed to unregister service worker:", e), !1;
}
}
async function u() {
const e = {
supported: typeof window < "u" && "serviceWorker" in navigator,
registered: !1,
active: !1,
installing: !1,
waiting: !1
};
if (!e.supported)
return e;
try {
const t = await navigator.serviceWorker.getRegistration();
t && (e.registered = !0, e.active = t.active !== null, e.installing = t.installing !== null, e.waiting = t.waiting !== null);
} catch {
}
return e;
}
function W(e) {
if (typeof window > "u" || !("serviceWorker" in navigator))
return () => {
};
const t = (n) => {
const r = n.target?.registration;
r && e(r);
};
return navigator.serviceWorker.addEventListener("controllerchange", t), () => {
navigator.serviceWorker.removeEventListener("controllerchange", t);
};
}
async function y(e = 1e4) {
if (typeof window > "u" || !("serviceWorker" in navigator))
throw new Error("Service Worker not supported");
return new Promise((t, n) => {
const r = setTimeout(() => {
n(new Error("Service Worker ready timeout"));
}, e);
navigator.serviceWorker.ready.then((a) => {
clearTimeout(r), t(a);
}).catch((a) => {
clearTimeout(r), n(a);
});
});
}
function g(e = {}) {
const {
mswVersion: t = "2.6.4",
customCode: n = "",
enableLogging: r = !1
} = e;
return `
/**
* Mock Service Worker
* Generated by @dbs-portal/tool-mock
*/
// Import MSW
importScripts('https://unpkg.com/msw@${t}/lib/mockServiceWorker.js');
${r ? `
// Enable logging
self.addEventListener('message', (event) => {
console.log('MSW Service Worker message:', event.data);
});
` : ""}
// Handle MSW lifecycle events
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;
}
case 'CLIENT_CLOSED': {
// Handle client closed
break;
}
default: {
// Forward other messages to MSW
break;
}
}
});
// Handle fetch events
self.addEventListener('fetch', (event) => {
// MSW will handle this
});
// Handle install event
self.addEventListener('install', (event) => {
${r ? "console.log('MSW Service Worker installed');" : ""}
self.skipWaiting();
});
// Handle activate event
self.addEventListener('activate', (event) => {
${r ? "console.log('MSW Service Worker activated');" : ""}
event.waitUntil(self.clients.claim());
});
${n}
`;
}
async function M(e, t = {}) {
const n = g(t);
console.log(`Service worker content generated for: ${e}`), console.log(n);
}
const _ = {
/**
* Clear service worker cache
*/
async clearCache() {
if (!(typeof window > "u" || !("caches" in window)))
try {
const e = await caches.keys();
await Promise.all(
e.map((t) => caches.delete(t))
), console.log("Service worker cache cleared");
} catch (e) {
console.error("Failed to clear service worker cache:", e);
}
},
/**
* Force service worker update
*/
async forceUpdate() {
if (!(typeof window > "u" || !("serviceWorker" in navigator)))
try {
const e = await navigator.serviceWorker.getRegistration();
e && (await e.update(), console.log("Service worker update forced"));
} catch (e) {
console.error("Failed to force service worker update:", e);
}
},
/**
* Get service worker info
*/
async getInfo() {
const e = await u();
let t = null;
if (e.supported)
try {
t = await navigator.serviceWorker.getRegistration();
} catch {
}
return {
status: e,
registration: t ? {
scope: t.scope,
updateViaCache: t.updateViaCache,
active: t.active?.state,
installing: t.installing?.state,
waiting: t.waiting?.state
} : null
};
}
};
function E(e = {}) {
const {
port: t = 3e3,
host: n = "localhost",
https: r = !1,
cors: a = !0,
proxy: o = {},
mswConfig: i = {},
hotReload: s = {}
} = e;
return {
server: {
port: t,
host: n,
https: r,
cors: a,
proxy: o,
// Configure middleware for MSW
middlewareMode: !1,
// Custom middleware
configureServer: (c) => {
i.enabled !== !1 && m(c, i), s.enabled !== !1 && p(c, s);
}
},
// Optimizations for development
optimizeDeps: {
include: ["msw"],
exclude: ["@dbs-portal/tool-mock"]
},
// Define environment variables
define: {
__MSW_ENABLED__: JSON.stringify(i.enabled !== !1),
__MSW_LOGGING__: JSON.stringify(i.logging !== !1)
}
};
}
function m(e, t) {
const { handlers: n = [], logging: r = !0, delay: a = [100, 300] } = t;
e.middlewares.use("/mockServiceWorker.js", (o, i) => {
if (o.method === "GET") {
i.setHeader("Content-Type", "application/javascript"), i.setHeader("Service-Worker-Allowed", "/");
const s = f();
i.end(s), r && console.log("MSW: Served service worker");
}
}), e.middlewares.use("/api/__msw/status", (o, i) => {
o.method === "GET" && (i.setHeader("Content-Type", "application/json"), i.end(JSON.stringify({
enabled: !0,
mode: "development",
handlersCount: n.length,
delay: a,
timestamp: (/* @__PURE__ */ new Date()).toISOString()
})));
}), e.middlewares.use("/api/__msw/reload", (o, i) => {
o.method === "POST" && (e.ws.send({
type: "custom",
event: "msw:reload",
data: { timestamp: Date.now() }
}), i.setHeader("Content-Type", "application/json"), i.end(JSON.stringify({ success: !0 })), r && console.log("MSW: Handlers reloaded"));
}), r && console.log("MSW: Development middleware configured");
}
function p(e, t) {
const {
watchPaths: n = ["src/**/*mock*", "src/**/*handler*"],
debounceDelay: r = 300
} = t;
let a = null;
e.watcher.on("change", (o) => {
n.some((s) => o.includes(s.replace("*", ""))) && (a && clearTimeout(a), a = setTimeout(() => {
e.ws.send({
type: "custom",
event: "msw:file-changed",
data: { filePath: o, timestamp: Date.now() }
}), console.log(`MSW: Mock file changed: ${o}`);
}, r));
}), console.log("MSW: Hot reload middleware configured");
}
function f() {
return `
/**
* MSW Development Service Worker
*/
importScripts('https://unpkg.com/msw@2.6.4/lib/mockServiceWorker.js');
// Development-specific features
self.addEventListener('message', async function (event) {
const { type, payload } = event.data;
switch (type) {
case 'MOCK_ACTIVATE': {
console.log('MSW: Activating mock service worker');
self.registration.addEventListener('activate', () => {
event.ports[0].postMessage({ type: 'MOCK_ACTIVATED' });
});
break;
}
case 'MOCK_DEACTIVATE': {
console.log('MSW: Deactivating mock service worker');
await self.registration.unregister();
event.ports[0].postMessage({ type: 'MOCK_DEACTIVATED' });
break;
}
case 'MOCK_RELOAD': {
console.log('MSW: Reloading handlers');
// Trigger reload
self.clients.matchAll().then(clients => {
clients.forEach(client => {
client.postMessage({ type: 'MSW_RELOAD' });
});
});
break;
}
default: {
// Forward to MSW
break;
}
}
});
// Log requests in development
self.addEventListener('fetch', (event) => {
if (event.request.url.includes('/api/')) {
console.log('MSW: Intercepting request:', event.request.method, event.request.url);
}
});
console.log('MSW: Development service worker loaded');
`;
}
const C = {
/**
* Create proxy configuration for API endpoints
*/
createApiProxy: (e) => ({
"/api": {
target: e,
changeOrigin: !0,
rewrite: (t) => t.replace(/^\/api/, "")
}
}),
/**
* Create CORS configuration for development
*/
createCorsConfig: (e = ["http://localhost:3000"]) => ({
origin: e,
methods: ["GET", "POST", "PUT", "DELETE", "PATCH", "OPTIONS"],
allowedHeaders: ["Content-Type", "Authorization", "X-Requested-With"],
credentials: !0
}),
/**
* Create development environment variables
*/
createDevEnvVars: (e = {}) => ({
__DEV__: !0,
__MSW_ENABLED__: e.mswEnabled !== !1,
__MSW_LOGGING__: e.mswLogging !== !1,
__API_BASE_URL__: e.apiBaseUrl || "/api"
})
};
async function T(e = {}) {
console.log("Starting development server with MSW support..."), e.mswConfig?.enabled !== !1 && await d({
config: {
enabled: !0,
mode: "development",
logging: e.mswConfig?.logging !== !1,
delay: e.mswConfig?.delay || [100, 300]
},
handlers: e.mswConfig?.handlers || []
}), console.log("MSW development server ready!");
}
function b() {
return {
"/api/__health": (e, t) => {
t.setHeader("Content-Type", "application/json"), t.end(JSON.stringify({
status: "healthy",
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
services: {
msw: !0,
api: !0
}
}));
}
};
}
const l = {
/**
* Create build configuration for MSW
*/
createBuildConfig: (e = {}) => {
const {
outDir: t = "dist",
srcDir: n = "src",
sourcemap: r = !0,
minify: a = !0,
external: o = ["msw"]
} = e;
return {
build: {
outDir: t,
sourcemap: r,
minify: a,
lib: {
entry: `${n}/index.ts`,
formats: ["es", "cjs"],
fileName: (i) => `index.${i === "es" ? "mjs" : "js"}`
},
rollupOptions: {
external: o,
output: {
globals: {
msw: "msw"
}
}
}
}
};
},
/**
* Create library build configuration
*/
createLibraryConfig: (e) => {
const t = l.createBuildConfig(e);
return {
...t,
build: {
...t.build,
lib: {
...t.build.lib,
name: e.name
}
}
};
},
/**
* Create development build configuration
*/
createDevConfig: (e = {}) => {
const t = l.createBuildConfig(e);
return {
...t,
build: {
...t.build,
minify: !1,
sourcemap: !0
}
};
}
}, D = {
/**
* Create mock module configuration
*/
createModuleConfig: (e) => ({
autoImport: !0,
condition: () => !0,
...e
}),
/**
* Generate mock module imports
*/
generateModuleImports: (e) => {
const t = e.filter((r) => r.autoImport && (!r.condition || r.condition())).map((r) => `import ${r.name} from '${r.path}';`).join(`
`), n = e.filter((r) => r.autoImport && (!r.condition || r.condition())).map((r) => r.name).join(", ");
return `
${t}
export { ${n} };
export const mockModules = {
${e.map((r) => `${r.name}: ${r.name}`).join(`,
`)}
};
`;
},
/**
* Create conditional module loader
*/
createConditionalLoader: (e) => `
export async function loadMockModules() {
const modules = {};
${e.map((t) => `
if (${t.condition?.toString() || "true"}) {
try {
const module = await import('${t.path}');
modules['${t.name}'] = module;
} catch (error) {
console.warn('Failed to load mock module ${t.name}:', error);
}
}
`).join(`
`)}
return modules;
}
`
}, R = {
/**
* Create hot reload configuration
*/
createHotReloadConfig: (e = {}) => ({
enabled: !0,
watchPatterns: ["src/**/*mock*", "src/**/*handler*"],
debounceDelay: 300,
strategy: "handlers-only",
...e
}),
/**
* Generate hot reload code
*/
generateHotReloadCode: (e) => e.enabled ? `
if (import.meta.hot) {
import.meta.hot.accept((newModule) => {
if (newModule) {
console.log('MSW: Hot reloading mock handlers');
// Reload strategy: ${e.strategy}
if ('${e.strategy}' === 'handlers-only') {
// Reload only handlers
if (typeof window !== 'undefined' && window.__MSW_RELOAD_HANDLERS__) {
window.__MSW_RELOAD_HANDLERS__(newModule);
}
} else {
// Full reload
window.location.reload();
}
}
});
}
` : "",
/**
* Create file watcher patterns
*/
createWatchPatterns: (e = []) => [...[
"src/**/*mock*",
"src/**/*handler*",
"src/**/*.mock.*",
"src/**/*.handler.*"
], ...e]
}, L = {
/**
* Create environment-specific configuration
*/
createEnvConfig: (e) => {
switch (e) {
case "development":
return {
mswEnabled: !0,
mswLogging: !0,
mswDelay: [100, 300],
hotReload: !0,
sourcemap: !0,
minify: !1
};
case "test":
return {
mswEnabled: !0,
mswLogging: !1,
mswDelay: 0,
hotReload: !1,
sourcemap: !0,
minify: !1
};
case "production":
return {
mswEnabled: !1,
mswLogging: !1,
mswDelay: 0,
hotReload: !1,
sourcemap: !1,
minify: !0
};
default:
return {};
}
},
/**
* Generate environment variables
*/
generateEnvVars: (e) => ({
VITE_MSW_ENABLED: String(e.mswEnabled || !1),
VITE_MSW_LOGGING: String(e.mswLogging || !1),
VITE_MSW_DELAY: String(e.mswDelay || 0),
VITE_HOT_RELOAD: String(e.hotReload || !1)
})
}, A = {
/**
* Analyze MSW bundle impact
*/
analyzeMSWImpact: (e) => {
const t = e.modules?.filter(
(r) => r.name?.includes("msw") || r.name?.includes("mock")
) || [], n = t.reduce(
(r, a) => r + (a.size || 0),
0
);
return {
moduleCount: t.length,
totalSize: n,
modules: t,
impact: {
percentage: e.totalSize ? n / e.totalSize * 100 : 0,
recommendation: n > 1e5 ? "Consider code splitting" : "Size is acceptable"
}
};
},
/**
* Generate bundle report
*/
generateBundleReport: (e) => `
# MSW Bundle Analysis Report
## Summary
- Mock modules: ${e.moduleCount}
- Total size: ${(e.totalSize / 1024).toFixed(2)} KB
- Bundle impact: ${e.impact.percentage.toFixed(2)}%
## Recommendation
${e.impact.recommendation}
## Modules
${e.modules.map(
(t) => `- ${t.name}: ${(t.size / 1024).toFixed(2)} KB`
).join(`
`)}
`
}, O = {
/**
* Create performance monitoring
*/
createPerformanceMonitor: () => {
const e = {
mswSetupTime: 0,
handlerRegistrationTime: 0,
requestInterceptionTime: 0
};
return {
startTimer: (t) => {
const n = performance.now();
return () => {
e[t] = performance.now() - n;
};
},
getMetrics: () => ({ ...e }),
reset: () => {
Object.keys(e).forEach((t) => {
e[t] = 0;
});
}
};
},
/**
* Generate performance report
*/
generatePerformanceReport: (e) => `
# MSW Performance Report
## Setup Performance
- MSW Setup: ${e.mswSetupTime.toFixed(2)}ms
- Handler Registration: ${e.handlerRegistrationTime.toFixed(2)}ms
- Request Interception: ${e.requestInterceptionTime.toFixed(2)}ms
## Total Overhead
${(e.mswSetupTime + e.handlerRegistrationTime).toFixed(2)}ms
`
};
export {
S as a,
k as b,
g as c,
M as d,
E as e,
C as f,
u as g,
T as h,
w as i,
b as j,
l as k,
R as l,
D as m,
L as n,
W as o,
A as p,
O as q,
_ as s,
h as u,
y as w
};
//# sourceMappingURL=utils-fISEXFeG.js.map