UNPKG

msw

Version:

Seamless REST/GraphQL API mocking library for browser and Node.js.

77 lines (76 loc) • 2.47 kB
import { NetworkReadyState, defineNetwork } from "msw/experimental"; import { defaultNetworkOptions } from "virtual:msw/options"; //#region src/vite/runtime.ts const hot = import.meta.hot; const hotData = hot?.data; while (hotData?.disposeNetwork) { const disposePrevious = hotData.disposeNetwork; await disposePrevious(); if (hotData.disposeNetwork === disposePrevious) break; } const network = defineNetwork(defaultNetworkOptions); if (hot && hotData) { let resumeAfterUpdate = false; let retired = false; let pendingOperation; const configure = network.configure; const enable = network.enable; const disable = network.disable; const runOperation = (action) => { const result = pendingOperation ? pendingOperation.then(action) : action(); if (result instanceof Promise) { const operation = result.finally(() => { if (pendingOperation === operation) pendingOperation = void 0; }); pendingOperation = operation; return operation; } }; const stop = () => { if (network.readyState === NetworkReadyState.ENABLED) return disable(); }; network.configure = (options) => { runOperation(() => { if (retired) return; const stopped = stop(); if (stopped instanceof Promise) return stopped.then(() => configure(options)); configure(options); }); }; network.enable = async () => { await runOperation(() => { if (!retired && network.readyState === NetworkReadyState.DISABLED) return enable(); }); }; network.disable = async () => { await runOperation(stop); }; const disableNetwork = async () => { await network.disable(); }; const beforeUpdate = async () => { resumeAfterUpdate = network.readyState === NetworkReadyState.ENABLED; await disableNetwork(); }; const afterUpdate = async () => { const shouldResume = resumeAfterUpdate; resumeAfterUpdate = false; if (shouldResume && network.readyState === NetworkReadyState.DISABLED) await network.enable(); }; hot.on("vite:beforeUpdate", beforeUpdate); hot.on("vite:afterUpdate", afterUpdate); hot.on("vite:beforeFullReload", disableNetwork); const disposeNetwork = async () => { retired = true; resumeAfterUpdate = false; hot.off("vite:beforeUpdate", beforeUpdate); hot.off("vite:afterUpdate", afterUpdate); hot.off("vite:beforeFullReload", disableNetwork); await disableNetwork(); }; hotData.disposeNetwork = disposeNetwork; hot.dispose(disposeNetwork); } //#endregion export { network }; //# sourceMappingURL=runtime.js.map