import { devUtils } from '~/core/utils/internal/devUtils' import type { SetupWorkerInternalContext } from '../setupWorker/glossary' /** * Check whether the registered Service Worker has been * generated by the installed version of the library. * Prints a warning message if the worker scripts mismatch. */ export async function checkWorkerIntegrity( context: SetupWorkerInternalContext, ): Promise { // Request the integrity checksum from the registered worker. context.workerChannel.send('INTEGRITY_CHECK_REQUEST') const { payload } = await context.events.once('INTEGRITY_CHECK_RESPONSE') // Compare the response from the Service Worker and the // global variable set during the build. // The integrity is validated based on the worker script's checksum // that's derived from its minified content during the build. // The "SERVICE_WORKER_CHECKSUM" global variable is injected by the build. if (payload.checksum !== SERVICE_WORKER_CHECKSUM) { devUtils.warn( `The currently registered Service Worker has been generated by a different version of MSW (${payload.packageVersion}) and may not be fully compatible with the installed version. It's recommended you update your worker script by running this command: \u2022 npx msw init You can also automate this process and make the worker script update automatically upon the library installations. Read more: https://mswjs.io/docs/cli/init.`, ) } }