export { M as ModuleMocker, c as createCompilerHints } from './chunk-mocker.js'; import { M as MockerRegistry } from './chunk-registry.js'; import { c as cleanUrl } from './chunk-utils.js'; export { M as ModuleMockerServerInterceptor } from './chunk-interceptor-native.js'; import './index.js'; import './chunk-pathe.ff20891b.js'; class ModuleMockerMSWInterceptor { constructor(options = {}) { this.options = options; if (!options.globalThisAccessor) { options.globalThisAccessor = '"__vitest_mocker__"'; } } mocks = new MockerRegistry(); startPromise; worker; async register(module) { await this.init(); this.mocks.add(module); } async delete(url) { await this.init(); this.mocks.delete(url); } invalidate() { this.mocks.clear(); } async resolveManualMock(mock) { const exports = Object.keys(await mock.resolve()); const module = `const module = globalThis[${this.options.globalThisAccessor}].getFactoryModule("${mock.url}");`; const keys = exports.map((name) => { if (name === "default") { return `export default module["default"];`; } return `export const ${name} = module["${name}"];`; }).join("\n"); const text = `${module} ${keys}`; return new Response(text, { headers: { "Content-Type": "application/javascript" } }); } async init() { if (this.worker) { return this.worker; } if (this.startPromise) { return this.startPromise; } const worker = this.options.mswWorker; this.startPromise = Promise.all([ worker ? { setupWorker(handler) { worker.use(handler); return worker; } } : import('msw/browser'), import('msw/core/http') ]).then(([{ setupWorker }, { http }]) => { const worker2 = setupWorker( http.get(/.+/, async ({ request }) => { const path = cleanQuery(request.url.slice(location.origin.length)); if (!this.mocks.has(path)) { return passthrough(); } const mock = this.mocks.get(path); switch (mock.type) { case "manual": return this.resolveManualMock(mock); case "automock": case "autospy": return Response.redirect(injectQuery(path, `mock=${mock.type}`)); case "redirect": return Response.redirect(mock.redirect); default: throw new Error(`Unknown mock type: ${mock.type}`); } }) ); return worker2.start(this.options.mswOptions).then(() => worker2); }).finally(() => { this.worker = worker; this.startPromise = void 0; }); return await this.startPromise; } } const timestampRegexp = /(\?|&)t=\d{13}/; const versionRegexp = /(\?|&)v=\w{8}/; function cleanQuery(url) { return url.replace(timestampRegexp, "").replace(versionRegexp, ""); } function passthrough() { return new Response(null, { status: 302, statusText: "Passthrough", headers: { "x-msw-intention": "passthrough" } }); } const replacePercentageRE = /%/g; function injectQuery(url, queryToInject) { const resolvedUrl = new URL( url.replace(replacePercentageRE, "%25"), location.href ); const { search, hash } = resolvedUrl; const pathname = cleanUrl(url); return `${pathname}?${queryToInject}${search ? `&${search.slice(1)}` : ""}${hash ?? ""}`; } export { ModuleMockerMSWInterceptor };