sam522's picture
node
d4b85c0
// src/native/index.ts
import { FetchInterceptor } from "@mswjs/interceptors/fetch";
import { XMLHttpRequestInterceptor } from "@mswjs/interceptors/XMLHttpRequest";
// src/node/SetupServerCommonApi.ts
import { invariant } from "outvariant";
import {
BatchInterceptor,
InterceptorReadyState
} from "@mswjs/interceptors";
import { SetupApi } from '../core/SetupApi.mjs';
import { handleRequest } from '../core/utils/handleRequest.mjs';
import { mergeRight } from '../core/utils/internal/mergeRight.mjs';
import { InternalError, devUtils } from '../core/utils/internal/devUtils.mjs';
import { handleWebSocketEvent } from '../core/ws/handleWebSocketEvent.mjs';
import { webSocketInterceptor } from '../core/ws/webSocketInterceptor.mjs';
import { isHandlerKind } from '../core/utils/internal/isHandlerKind.mjs';
var DEFAULT_LISTEN_OPTIONS = {
onUnhandledRequest: "warn"
};
var SetupServerCommonApi = class extends SetupApi {
interceptor;
resolvedOptions;
constructor(interceptors, handlers) {
super(...handlers);
this.interceptor = new BatchInterceptor({
name: "setup-server",
interceptors: interceptors.map((Interceptor) => new Interceptor())
});
this.resolvedOptions = {};
}
/**
* Subscribe to all requests that are using the interceptor object
*/
init() {
this.interceptor.on(
"request",
async ({ request, requestId, controller }) => {
const response = await handleRequest(
request,
requestId,
this.handlersController.currentHandlers().filter(isHandlerKind("RequestHandler")),
this.resolvedOptions,
this.emitter,
{
onPassthroughResponse(request2) {
const acceptHeader = request2.headers.get("accept");
if (acceptHeader) {
const nextAcceptHeader = acceptHeader.replace(
/(,\s+)?msw\/passthrough/,
""
);
if (nextAcceptHeader) {
request2.headers.set("accept", nextAcceptHeader);
} else {
request2.headers.delete("accept");
}
}
}
}
);
if (response) {
controller.respondWith(response);
}
return;
}
);
this.interceptor.on("unhandledException", ({ error }) => {
if (error instanceof InternalError) {
throw error;
}
});
this.interceptor.on(
"response",
({ response, isMockedResponse, request, requestId }) => {
this.emitter.emit(
isMockedResponse ? "response:mocked" : "response:bypass",
{
response,
request,
requestId
}
);
}
);
handleWebSocketEvent({
getUnhandledRequestStrategy: () => {
return this.resolvedOptions.onUnhandledRequest;
},
getHandlers: () => {
return this.handlersController.currentHandlers();
},
onMockedConnection: () => {
},
onPassthroughConnection: () => {
}
});
}
listen(options = {}) {
this.resolvedOptions = mergeRight(
DEFAULT_LISTEN_OPTIONS,
options
);
this.interceptor.apply();
this.init();
this.subscriptions.push(() => this.interceptor.dispose());
webSocketInterceptor.apply();
this.subscriptions.push(() => webSocketInterceptor.dispose());
invariant(
[InterceptorReadyState.APPLYING, InterceptorReadyState.APPLIED].includes(
this.interceptor.readyState
),
devUtils.formatMessage(
'Failed to start "setupServer": the interceptor failed to apply. This is likely an issue with the library and you should report it at "%s".'
),
"https://github.com/mswjs/msw/issues/new/choose"
);
}
close() {
this.dispose();
}
};
// src/native/index.ts
function setupServer(...handlers) {
return new SetupServerCommonApi(
[FetchInterceptor, XMLHttpRequestInterceptor],
handlers
);
}
export {
setupServer
};
//# sourceMappingURL=index.mjs.map