This repo contains the templates used by the webrpc-gen cli to code-generate
webrpc Typescript server and client code.
This generator, from a webrpc schema/design file will code-generate:
-
Client -- an isomorphic/universal Typescript client to speak to a webrpc server using the provided schema. This client is compatible with any webrpc server language (ie. Go, nodejs, etc.). As the client is isomorphic, means you can use this within a Web browser or use the client in a server like nodejs -- both without needing any dependencies. I suggest to read the generated TS output of the generated code, and you shall see, its nothing fancy, just the sort of thing you'd write by hand.
-
Server -- a nodejs Typescript server handler. See examples.
The generated client includes a queryKey property with type-safe query key generators for each endpoint. This makes it easy to use with popular data-fetching libraries:
import { useQuery } from '@tanstack/react-query'
import { Example } from './client.gen'
const client = new Example('http://localhost:3000', fetch)
function UserProfile({ userId }) {
const { data } = useQuery({
queryKey: client.queryKey.getUser({ userId }),
queryFn: ({ signal }) => client.getUser({ userId }, undefined, signal)
})
return <div>{data?.user.name}</div>
}The query keys follow the pattern [ServiceName, methodName, request?] and are fully type-safe with as const assertions.
webrpc-gen -schema=example.ridl -target=typescript -server -client -out=./example.gen.ts
or
webrpc-gen -schema=example.ridl -target=github.com/webrpc/[email protected] -server -client -out=./example.gen.ts
or
webrpc-gen -schema=example.ridl -target=./local-templates-on-disk -server -client -out=./example.gen.ts
As you can see, the -target supports default typescript, any git URI, or a local folder :)
Change any of the following values by passing -option="Value" CLI flag to webrpc-gen.
| webrpc-gen -option | Description | Default value | Version |
|---|---|---|---|
-client |
generate client code | unset (false) |
v0.0.1 |
-server |
generate server code | unset (false) |
v0.0.1 |
-webrpcHeader |
true |
enable client send webrpc version in http headers | v0.15.0 |
Note: Generated code requires ES2022+ runtime environment.