diff --git a/package/package.json b/package/package.json index 39d12e3..2d4e8fd 100644 --- a/package/package.json +++ b/package/package.json @@ -63,15 +63,15 @@ }, "devDependencies": { "@sveltejs/kit": "^1.27.0", - "@trpc/client": "^10.45.2", - "@trpc/server": "^10.45.2", + "@trpc/client": "^11.4.3", + "@trpc/server": "^11.4.3", "@types/ws": "^8.18.0", "typescript": "^5.8.2" }, "peerDependencies": { "@sveltejs/adapter-node": ">=1.2", - "@trpc/client": "^10.0.0", - "@trpc/server": "^10.0.0", + "@trpc/client": "^11.4.3", + "@trpc/server": "^11.4.3", "ws": ">=8" } } diff --git a/package/src/client.ts b/package/src/client.ts index 14e0f6a..6a18e0c 100644 --- a/package/src/client.ts +++ b/package/src/client.ts @@ -47,7 +47,7 @@ type CreateTRPCClientOptions = ( * A function that transforms the data before transferring it. * @see https://trpc.io/docs/data-transformers */ - transformer?: Router['_def']['_config']['transformer']; + transformer?: any; }; /** @@ -59,7 +59,7 @@ export function createTRPCClient( url: '/trpc' } ) { - if (links) return internalCreateTRPCClient({ transformer, links }); + if (links) return internalCreateTRPCClient({ links }); if (typeof window === 'undefined' && !init) { throw new Error( @@ -68,13 +68,13 @@ export function createTRPCClient( } return internalCreateTRPCClient({ - transformer, links: [ httpBatchLink({ url: typeof window === 'undefined' ? `${init.url.origin}${url}` : `${location.origin}${url}`, - fetch: typeof window === 'undefined' ? init.fetch : init?.fetch ?? window.fetch, - headers + fetch: typeof window === 'undefined' ? init.fetch : (init?.fetch ?? window.fetch), + headers, + ...(transformer && { transformer }) }) ] }); diff --git a/package/src/server.ts b/package/src/server.ts index 3037ed0..8f9fa21 100644 --- a/package/src/server.ts +++ b/package/src/server.ts @@ -6,7 +6,7 @@ import type { inferRouterContext, inferRouterError } from '@trpc/server'; -import { resolveHTTPResponse, type ResponseMeta } from '@trpc/server/http'; +import { resolveResponse, type ResponseMeta } from '@trpc/server/http'; import type { TRPCResponse } from '@trpc/server/rpc'; import { serialize, type CookieSerializeOptions } from 'cookie'; import type { ValidRoute } from './ValidRoute'; @@ -52,8 +52,8 @@ export function createTRPCHandle({ responseMeta?: (opts: { data: TRPCResponse>[]; ctx?: inferRouterContext; - paths?: string[]; - type: ProcedureType; + paths: readonly string[]; + type: ProcedureType | 'unknown'; errors: TRPCError[]; }) => ResponseMeta; @@ -72,16 +72,7 @@ export function createTRPCHandle({ }): Handle { return async ({ event, resolve }) => { if (event.url.pathname.startsWith(url + '/')) { - const request = event.request as Request & { - headers: Record; - }; - - const req = { - method: request.method, - headers: request.headers, - query: event.url.searchParams, - body: await request.text() - }; + const request = event.request; // Using the default `event.setHeaders` and `event.cookies` will not work // as the event in not resolved by SvelteKit. Instead, we "proxy" the access @@ -115,27 +106,26 @@ export function createTRPCHandle({ originalDeleteCookies(name, options); }; - const httpResponse = await resolveHTTPResponse({ + const httpResponse = await resolveResponse({ router, - req, + req: request, path: event.url.pathname.substring(url.length + 1), createContext: async () => createContext?.(event), responseMeta, // eslint-disable-next-line @typescript-eslint/no-explicit-any - onError: onError as any + error: onError as any }); - const { status, headers, body } = httpResponse as { - status: number; - headers: Record; - body: string; - }; + const status = httpResponse.status; + const body = await httpResponse.text(); const finalHeaders = new Headers(); - for (const [key, value] of Object.entries(headers)) { + // Copy headers from response + httpResponse.headers.forEach((value, key) => { finalHeaders.set(key, value); - } + }); + for (const [key, value] of Object.entries(headersProxy)) { finalHeaders.set(key, value); } diff --git a/package/src/websocket/client.ts b/package/src/websocket/client.ts index ef8661b..71c7684 100644 --- a/package/src/websocket/client.ts +++ b/package/src/websocket/client.ts @@ -6,9 +6,9 @@ import { } from '@trpc/client'; import { AnyRouter } from '@trpc/server'; -export function createTRPCWebSocketClient(): ReturnType< - typeof createTRPCProxyClient -> { +export function createTRPCWebSocketClient(opts?: { + transformer?: any; +}): ReturnType> { if (typeof location === 'undefined') return; const uri = `${location.protocol === 'http:' ? 'ws:' : 'wss:'}//${location.host}/trpc`; @@ -18,6 +18,11 @@ export function createTRPCWebSocketClient(): ReturnTyp }); return createTRPCProxyClient({ - links: [wsLink({ client: wsClient })] - } as CreateTRPCClientOptions); + links: [ + wsLink({ + client: wsClient, + ...(opts?.transformer && { transformer: opts.transformer }) + }) + ] + }); }