Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions package/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -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"
}
}
10 changes: 5 additions & 5 deletions package/src/client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ type CreateTRPCClientOptions<Router extends AnyRouter> = (
* A function that transforms the data before transferring it.
* @see https://trpc.io/docs/data-transformers
*/
transformer?: Router['_def']['_config']['transformer'];
transformer?: any;
};

/**
Expand All @@ -59,7 +59,7 @@ export function createTRPCClient<Router extends AnyRouter>(
url: '/trpc'
}
) {
if (links) return internalCreateTRPCClient<Router>({ transformer, links });
if (links) return internalCreateTRPCClient<Router>({ links });

if (typeof window === 'undefined' && !init) {
throw new Error(
Expand All @@ -68,13 +68,13 @@ export function createTRPCClient<Router extends AnyRouter>(
}

return internalCreateTRPCClient<Router>({
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 })
})
]
});
Expand Down
36 changes: 13 additions & 23 deletions package/src/server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand Down Expand Up @@ -52,8 +52,8 @@ export function createTRPCHandle<Router extends AnyRouter, URL extends string>({
responseMeta?: (opts: {
data: TRPCResponse<unknown, inferRouterError<Router>>[];
ctx?: inferRouterContext<Router>;
paths?: string[];
type: ProcedureType;
paths: readonly string[];
type: ProcedureType | 'unknown';
errors: TRPCError[];
}) => ResponseMeta;

Expand All @@ -72,16 +72,7 @@ export function createTRPCHandle<Router extends AnyRouter, URL extends string>({
}): Handle {
return async ({ event, resolve }) => {
if (event.url.pathname.startsWith(url + '/')) {
const request = event.request as Request & {
headers: Record<string, string | string[]>;
};

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
Expand Down Expand Up @@ -115,27 +106,26 @@ export function createTRPCHandle<Router extends AnyRouter, URL extends string>({
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<string, string>;
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);
}
Expand Down
15 changes: 10 additions & 5 deletions package/src/websocket/client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@ import {
} from '@trpc/client';
import { AnyRouter } from '@trpc/server';

export function createTRPCWebSocketClient<Router extends AnyRouter>(): ReturnType<
typeof createTRPCProxyClient<Router>
> {
export function createTRPCWebSocketClient<Router extends AnyRouter>(opts?: {
transformer?: any;
}): ReturnType<typeof createTRPCProxyClient<Router>> {
if (typeof location === 'undefined') return;

const uri = `${location.protocol === 'http:' ? 'ws:' : 'wss:'}//${location.host}/trpc`;
Expand All @@ -18,6 +18,11 @@ export function createTRPCWebSocketClient<Router extends AnyRouter>(): ReturnTyp
});

return createTRPCProxyClient<Router>({
links: [wsLink({ client: wsClient })]
} as CreateTRPCClientOptions<Router>);
links: [
wsLink({
client: wsClient,
...(opts?.transformer && { transformer: opts.transformer })
})
]
});
}