trpc-sveltekit icon indicating copy to clipboard operation
trpc-sveltekit copied to clipboard

Websocket :)

Open lantos1618 opened this issue 2 years ago • 2 comments

Hey awasome work, Could you give a shot at adding websockets to this project.

I gave it a shot

import { browser } from '$app/env';
import type { Router } from '$lib/server/trpc';
import * as trpc from '@trpc/client';
import type { inferProcedureInput, inferProcedureOutput } from '@trpc/server';
import trpcTransformer from 'trpc-transformer';
import { httpLink } from '@trpc/client/links/httpLink';
import { wsLink, createWSClient } from '@trpc/client/links/wsLink';
import { splitLink } from '@trpc/client/links/splitLink';

const url = browser ? '/trpc' : 'http://localhost:3000/trpc';

const httpUrl = 'http://localhost:3000/trpc';
const wsUrl = 'ws://localhost:3000/trpc';

export default (loadFetch?: typeof fetch) => {
  try {
    trpc.createTRPCClient<Router>({
      transformer: trpcTransformer,
      links: [
        splitLink({
          condition: (op) => {
            return op.type === 'subscription';
          },
          true: wsLink({
            client: createWSClient({
              url: wsUrl
            })
          }),
          false: httpLink({
            url: httpUrl
          })
        })
      ]
    });
  } catch {
    return trpc.createTRPCClient<Router>({
      url: '/trpc',
      transformer: trpcTransformer,
      fetch: loadFetch
    });
  }
};

type Query = keyof Router['_def']['queries'];
type Mutation = keyof Router['_def']['mutations'];

export type InferQueryOutput<RouteKey extends Query> = inferProcedureOutput<
  Router['_def']['queries'][RouteKey]
>;
export type InferQueryInput<RouteKey extends Query> = inferProcedureInput<
  Router['_def']['queries'][RouteKey]
>;
export type InferMutationOutput<RouteKey extends Mutation> = inferProcedureOutput<
  Router['_def']['mutations'][RouteKey]
>;
export type InferMutationInput<RouteKey extends Mutation> = inferProcedureInput<
  Router['_def']['mutations'][RouteKey]
>;

just don't know how to pull i the WS server into svelte

lantos1618 avatar Aug 18 '22 08:08 lantos1618

related: https://github.com/sveltejs/kit/issues/1491

TheBotlyNoob avatar Aug 21 '22 00:08 TheBotlyNoob

Let's see if SvelteKit comes with native WebSocket support first...

icflorescu avatar Sep 27 '22 22:09 icflorescu