Skip to content
Merged
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
11 changes: 10 additions & 1 deletion src/workerd/api/http.h
Original file line number Diff line number Diff line change
Expand Up @@ -436,7 +436,16 @@ class Fetcher: public JsRpcClientProvider {
});
}
JSG_TS_DEFINE(
type Service<T extends Rpc.WorkerEntrypointBranded | undefined = undefined> = Fetcher<T>;
type Service<
T extends
| (new (...args: any[]) => Rpc.WorkerEntrypointBranded)
| Rpc.WorkerEntrypointBranded
| ExportedHandler<any, any, any>
| undefined = undefined,
> = T extends new (...args: any[]) => Rpc.WorkerEntrypointBranded ? Fetcher<InstanceType<T>>
: T extends Rpc.WorkerEntrypointBranded ? Fetcher<T>
: T extends Exclude<Rpc.EntrypointBranded, Rpc.WorkerEntrypointBranded> ? never
: Fetcher<undefined>
);

if (!flags.getFetcherNoGetPutDelete()) {
Expand Down
15 changes: 13 additions & 2 deletions types/generated-snapshot/experimental/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1761,8 +1761,19 @@ interface RequestInit<Cf = CfProperties> {
signal?: AbortSignal | null;
encodeResponseBody?: "automatic" | "manual";
}
type Service<T extends Rpc.WorkerEntrypointBranded | undefined = undefined> =
Fetcher<T>;
type Service<
T extends
| (new (...args: any[]) => Rpc.WorkerEntrypointBranded)
| Rpc.WorkerEntrypointBranded
| ExportedHandler<any, any, any>
| undefined = undefined,
> = T extends new (...args: any[]) => Rpc.WorkerEntrypointBranded
? Fetcher<InstanceType<T>>
: T extends Rpc.WorkerEntrypointBranded
? Fetcher<T>
: T extends Exclude<Rpc.EntrypointBranded, Rpc.WorkerEntrypointBranded>
? never
: Fetcher<undefined>;
type Fetcher<
T extends Rpc.EntrypointBranded | undefined = undefined,
Reserved extends string = never,
Expand Down
14 changes: 12 additions & 2 deletions types/generated-snapshot/experimental/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1770,8 +1770,18 @@ export interface RequestInit<Cf = CfProperties> {
encodeResponseBody?: "automatic" | "manual";
}
export type Service<
T extends Rpc.WorkerEntrypointBranded | undefined = undefined,
> = Fetcher<T>;
T extends
| (new (...args: any[]) => Rpc.WorkerEntrypointBranded)
| Rpc.WorkerEntrypointBranded
| ExportedHandler<any, any, any>
| undefined = undefined,
> = T extends new (...args: any[]) => Rpc.WorkerEntrypointBranded
? Fetcher<InstanceType<T>>
: T extends Rpc.WorkerEntrypointBranded
? Fetcher<T>
: T extends Exclude<Rpc.EntrypointBranded, Rpc.WorkerEntrypointBranded>
? never
: Fetcher<undefined>;
export type Fetcher<
T extends Rpc.EntrypointBranded | undefined = undefined,
Reserved extends string = never,
Expand Down
15 changes: 13 additions & 2 deletions types/generated-snapshot/latest/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1727,8 +1727,19 @@ interface RequestInit<Cf = CfProperties> {
signal?: AbortSignal | null;
encodeResponseBody?: "automatic" | "manual";
}
type Service<T extends Rpc.WorkerEntrypointBranded | undefined = undefined> =
Fetcher<T>;
type Service<
T extends
| (new (...args: any[]) => Rpc.WorkerEntrypointBranded)
| Rpc.WorkerEntrypointBranded
| ExportedHandler<any, any, any>
| undefined = undefined,
> = T extends new (...args: any[]) => Rpc.WorkerEntrypointBranded
? Fetcher<InstanceType<T>>
: T extends Rpc.WorkerEntrypointBranded
? Fetcher<T>
: T extends Exclude<Rpc.EntrypointBranded, Rpc.WorkerEntrypointBranded>
? never
: Fetcher<undefined>;
type Fetcher<
T extends Rpc.EntrypointBranded | undefined = undefined,
Reserved extends string = never,
Expand Down
14 changes: 12 additions & 2 deletions types/generated-snapshot/latest/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1736,8 +1736,18 @@ export interface RequestInit<Cf = CfProperties> {
encodeResponseBody?: "automatic" | "manual";
}
export type Service<
T extends Rpc.WorkerEntrypointBranded | undefined = undefined,
> = Fetcher<T>;
T extends
| (new (...args: any[]) => Rpc.WorkerEntrypointBranded)
| Rpc.WorkerEntrypointBranded
| ExportedHandler<any, any, any>
| undefined = undefined,
> = T extends new (...args: any[]) => Rpc.WorkerEntrypointBranded
? Fetcher<InstanceType<T>>
: T extends Rpc.WorkerEntrypointBranded
? Fetcher<T>
: T extends Exclude<Rpc.EntrypointBranded, Rpc.WorkerEntrypointBranded>
? never
: Fetcher<undefined>;
export type Fetcher<
T extends Rpc.EntrypointBranded | undefined = undefined,
Reserved extends string = never,
Expand Down
3 changes: 1 addition & 2 deletions types/test/types/rpc.ts
Original file line number Diff line number Diff line change
Expand Up @@ -406,11 +406,10 @@ class TestNaughtyObject extends DurableObject {
interface Env {
REGULAR_SERVICE: Service;
RPC_SERVICE: Service<TestEntrypoint>;
TYPEOF_RPC_SERVICE: Service<typeof TestEntrypoint>;
NAUGHTY_SERVICE: Service<TestNaughtyEntrypoint>;
// @ts-expect-error `BoringClass` isn't an RPC capable type
__INVALID_RPC_SERVICE_1: Service<BoringClass>;
// @ts-expect-error `TestEntrypoint` is a `DurableObject`, not a `WorkerEntrypoint`
__INVALID_RPC_SERVICE_2: Service<TestObject>;

REGULAR_OBJECT: DurableObjectNamespace;
RPC_OBJECT: DurableObjectNamespace<TestObject>;
Expand Down