diff --git a/src/adapters/nuxt.ts b/src/adapters/nuxt.ts index 957e3174..d0fa9035 100644 --- a/src/adapters/nuxt.ts +++ b/src/adapters/nuxt.ts @@ -1,6 +1,7 @@ import { TRPCError } from '@trpc/server'; import type { NodeIncomingMessage, NodeServerResponse } from 'h3'; -import { defineEventHandler } from 'h3'; +import { defineEventHandler, getQuery } from 'h3'; +import { IncomingMessage } from 'http'; import { OpenApiErrorResponse, OpenApiRouter } from '../types'; import { normalizePath } from '../utils/path'; @@ -14,6 +15,10 @@ export type CreateOpenApiNuxtHandlerOptions = Omi 'maxBodySize' >; +type NuxtRequest = IncomingMessage & { + query?: ReturnType; +}; + export const createOpenApiNuxtHandler = ( opts: CreateOpenApiNuxtHandlerOptions, ) => { @@ -57,6 +62,7 @@ export const createOpenApiNuxtHandler = ( return; } + (event.node.req as NuxtRequest).query = getQuery(event); event.node.req.url = normalizePath(pathname); await openApiHttpHandler(event.node.req, event.node.res); }); diff --git a/test/adapters/nuxt.test.ts b/test/adapters/nuxt.test.ts index b4538214..57cf3f73 100644 --- a/test/adapters/nuxt.test.ts +++ b/test/adapters/nuxt.test.ts @@ -36,7 +36,7 @@ const createOpenApiNuxtHandlerCaller = ( return (req: { method: RequestMethod; params: Record; - query?: Record; + url?: string; body?: any; }) => new Promise<{ @@ -59,7 +59,7 @@ const createOpenApiNuxtHandlerCaller = ( const mockReq = httpMocks.createRequest({ body: req.body, method: req.method, - query: req.query, + url: req.url, }); const mockRes = httpMocks.createResponse({ req: mockReq, @@ -115,7 +115,7 @@ describe('nuxt adapter', () => { const res = await openApiNuxtHandlerCaller({ method: 'GET', params: { trpc: 'say-hello' }, - query: { name: 'James' }, + url: '/api/say-hello?name=James', }); expect(res.statusCode).toBe(200); @@ -145,7 +145,7 @@ describe('nuxt adapter', () => { const res = await openApiNuxtHandlerCaller({ method: 'GET', params: { trpc: 'say/hello' }, - query: { name: 'James' }, + url: '/api/say/hello?name=James', }); expect(res.statusCode).toBe(200);