59 lines
1.5 KiB
TypeScript
Executable file
59 lines
1.5 KiB
TypeScript
Executable file
import { setupWorker } from 'msw/browser'
|
|
|
|
import { websiteStore } from '../data/websites'
|
|
import { handlers } from '../handlers'
|
|
|
|
/**
|
|
* Browser MSW Setup
|
|
*
|
|
* Initializes MSW service worker for browser-based mocking.
|
|
* Used in development mode and E2E tests.
|
|
*/
|
|
|
|
export const worker = setupWorker(...handlers)
|
|
|
|
// Expose store on window for E2E test access
|
|
if (typeof window !== 'undefined') {
|
|
(window as Window & { __mswWebsiteStore?: typeof websiteStore }).__mswWebsiteStore = websiteStore
|
|
}
|
|
|
|
/**
|
|
* Initialize MSW in the browser
|
|
*
|
|
* Should be called before rendering the app:
|
|
* ```ts
|
|
* if (import.meta.env.VITE_ENABLE_MSW === 'true') {
|
|
* await setupMSW()
|
|
* }
|
|
* ```
|
|
*/
|
|
export async function setupMSW() {
|
|
try {
|
|
await worker.start({
|
|
onUnhandledRequest: 'bypass',
|
|
serviceWorker: {
|
|
url: '/mockServiceWorker.js',
|
|
},
|
|
})
|
|
|
|
// eslint-disable-next-line no-console -- Intentional dev log for MSW setup visibility
|
|
console.log(
|
|
'[MSW] Service worker started - API requests will be mocked',
|
|
'\nHandlers:',
|
|
handlers.length,
|
|
'registered'
|
|
)
|
|
} catch (error) {
|
|
// eslint-disable-next-line no-console -- Critical error log for MSW setup failures
|
|
console.error('[MSW] Failed to start service worker:', error)
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Stop MSW service worker
|
|
*/
|
|
export async function stopMSW() {
|
|
await worker.stop()
|
|
// eslint-disable-next-line no-console -- Intentional dev log for MSW teardown visibility
|
|
console.log('[MSW] Service worker stopped')
|
|
}
|