diff --git a/packages/mock/src/msw/index.ts b/packages/mock/src/msw/index.ts index 1bd139522..6c2ed31aa 100644 --- a/packages/mock/src/msw/index.ts +++ b/packages/mock/src/msw/index.ts @@ -95,19 +95,23 @@ const generateDefinition = ( : ''; const delay = getDelay(override, !isFunction(mock) ? mock : undefined); + const isHandlerOverridden = isReturnHttpResponse && !isTextPlain; + const infoParam = isHandlerOverridden ? 'info' : ''; const handlerImplementation = ` -export const ${handlerName} = (${isReturnHttpResponse && !isTextPlain ? `overrideResponse?: ${returnType}` : ''}) => { +export const ${handlerName} = (${isHandlerOverridden ? `overrideResponse?: ${returnType} | ((${infoParam}: Parameters[1]>[0]) => ${returnType})` : ''}) => { return http.${verb}('${route}', ${ delay === false - ? '() => {' - : `async () => { + ? `(${infoParam}) => {` + : `async (${infoParam}) => { await delay(${isFunction(delay) ? `(${delay})()` : delay});` } return new HttpResponse(${ isReturnHttpResponse ? isTextPlain ? `${getResponseMockFunctionName}()` - : `JSON.stringify(overrideResponse !== undefined ? overrideResponse : ${getResponseMockFunctionName}())` + : `JSON.stringify(overrideResponse !== undefined + ? (typeof overrideResponse === "function" ? overrideResponse(${infoParam}) : overrideResponse) + : ${getResponseMockFunctionName}())` : null }, {