File tree Expand file tree Collapse file tree 6 files changed +61
-11
lines changed Expand file tree Collapse file tree 6 files changed +61
-11
lines changed Original file line number Diff line number Diff line change @@ -436,7 +436,16 @@ class Fetcher: public JsRpcClientProvider {
436436 });
437437 }
438438 JSG_TS_DEFINE (
439- type Service<T extends Rpc.WorkerEntrypointBranded | undefined = undefined> = Fetcher<T>;
439+ type Service<
440+ T extends
441+ | (new (...args : any[]) => Rpc.WorkerEntrypointBranded )
442+ | Rpc.WorkerEntrypointBranded
443+ | ExportedHandler<any, any, any>
444+ | undefined = undefined,
445+ > = T extends new (...args : any[]) => Rpc.WorkerEntrypointBranded ? Fetcher<InstanceType<T>>
446+ : T extends Rpc.WorkerEntrypointBranded ? Fetcher<T>
447+ : T extends Exclude<Rpc.EntrypointBranded , Rpc.WorkerEntrypointBranded > ? never
448+ : Fetcher<undefined>
440449 );
441450
442451 if (!flags.getFetcherNoGetPutDelete ()) {
Original file line number Diff line number Diff line change @@ -1760,8 +1760,19 @@ interface RequestInit<Cf = CfProperties> {
17601760 signal ?: AbortSignal | null ;
17611761 encodeResponseBody ?: "automatic" | "manual" ;
17621762}
1763- type Service < T extends Rpc . WorkerEntrypointBranded | undefined = undefined > =
1764- Fetcher < T > ;
1763+ type Service <
1764+ T extends
1765+ | ( new ( ...args : any [ ] ) => Rpc . WorkerEntrypointBranded )
1766+ | Rpc . WorkerEntrypointBranded
1767+ | ExportedHandler < any , any , any >
1768+ | undefined = undefined ,
1769+ > = T extends new ( ...args : any [ ] ) => Rpc . WorkerEntrypointBranded
1770+ ? Fetcher < InstanceType < T > >
1771+ : T extends Rpc . WorkerEntrypointBranded
1772+ ? Fetcher < T >
1773+ : T extends Exclude < Rpc . EntrypointBranded , Rpc . WorkerEntrypointBranded >
1774+ ? never
1775+ : Fetcher < undefined > ;
17651776type Fetcher <
17661777 T extends Rpc . EntrypointBranded | undefined = undefined ,
17671778 Reserved extends string = never ,
Original file line number Diff line number Diff line change @@ -1769,8 +1769,18 @@ export interface RequestInit<Cf = CfProperties> {
17691769 encodeResponseBody ?: "automatic" | "manual" ;
17701770}
17711771export type Service <
1772- T extends Rpc . WorkerEntrypointBranded | undefined = undefined ,
1773- > = Fetcher < T > ;
1772+ T extends
1773+ | ( new ( ...args : any [ ] ) => Rpc . WorkerEntrypointBranded )
1774+ | Rpc . WorkerEntrypointBranded
1775+ | ExportedHandler < any , any , any >
1776+ | undefined = undefined ,
1777+ > = T extends new ( ...args : any [ ] ) => Rpc . WorkerEntrypointBranded
1778+ ? Fetcher < InstanceType < T > >
1779+ : T extends Rpc . WorkerEntrypointBranded
1780+ ? Fetcher < T >
1781+ : T extends Exclude < Rpc . EntrypointBranded , Rpc . WorkerEntrypointBranded >
1782+ ? never
1783+ : Fetcher < undefined > ;
17741784export type Fetcher <
17751785 T extends Rpc . EntrypointBranded | undefined = undefined ,
17761786 Reserved extends string = never ,
Original file line number Diff line number Diff line change @@ -1727,8 +1727,19 @@ interface RequestInit<Cf = CfProperties> {
17271727 signal ?: AbortSignal | null ;
17281728 encodeResponseBody ?: "automatic" | "manual" ;
17291729}
1730- type Service < T extends Rpc . WorkerEntrypointBranded | undefined = undefined > =
1731- Fetcher < T > ;
1730+ type Service <
1731+ T extends
1732+ | ( new ( ...args : any [ ] ) => Rpc . WorkerEntrypointBranded )
1733+ | Rpc . WorkerEntrypointBranded
1734+ | ExportedHandler < any , any , any >
1735+ | undefined = undefined ,
1736+ > = T extends new ( ...args : any [ ] ) => Rpc . WorkerEntrypointBranded
1737+ ? Fetcher < InstanceType < T > >
1738+ : T extends Rpc . WorkerEntrypointBranded
1739+ ? Fetcher < T >
1740+ : T extends Exclude < Rpc . EntrypointBranded , Rpc . WorkerEntrypointBranded >
1741+ ? never
1742+ : Fetcher < undefined > ;
17321743type Fetcher <
17331744 T extends Rpc . EntrypointBranded | undefined = undefined ,
17341745 Reserved extends string = never ,
Original file line number Diff line number Diff line change @@ -1736,8 +1736,18 @@ export interface RequestInit<Cf = CfProperties> {
17361736 encodeResponseBody ?: "automatic" | "manual" ;
17371737}
17381738export type Service <
1739- T extends Rpc . WorkerEntrypointBranded | undefined = undefined ,
1740- > = Fetcher < T > ;
1739+ T extends
1740+ | ( new ( ...args : any [ ] ) => Rpc . WorkerEntrypointBranded )
1741+ | Rpc . WorkerEntrypointBranded
1742+ | ExportedHandler < any , any , any >
1743+ | undefined = undefined ,
1744+ > = T extends new ( ...args : any [ ] ) => Rpc . WorkerEntrypointBranded
1745+ ? Fetcher < InstanceType < T > >
1746+ : T extends Rpc . WorkerEntrypointBranded
1747+ ? Fetcher < T >
1748+ : T extends Exclude < Rpc . EntrypointBranded , Rpc . WorkerEntrypointBranded >
1749+ ? never
1750+ : Fetcher < undefined > ;
17411751export type Fetcher <
17421752 T extends Rpc . EntrypointBranded | undefined = undefined ,
17431753 Reserved extends string = never ,
Original file line number Diff line number Diff line change @@ -406,11 +406,10 @@ class TestNaughtyObject extends DurableObject {
406406interface Env {
407407 REGULAR_SERVICE : Service ;
408408 RPC_SERVICE : Service < TestEntrypoint > ;
409+ TYPEOF_RPC_SERVICE : Service < typeof TestEntrypoint > ;
409410 NAUGHTY_SERVICE : Service < TestNaughtyEntrypoint > ;
410411 // @ts -expect-error `BoringClass` isn't an RPC capable type
411412 __INVALID_RPC_SERVICE_1 : Service < BoringClass > ;
412- // @ts -expect-error `TestEntrypoint` is a `DurableObject`, not a `WorkerEntrypoint`
413- __INVALID_RPC_SERVICE_2 : Service < TestObject > ;
414413
415414 REGULAR_OBJECT : DurableObjectNamespace ;
416415 RPC_OBJECT : DurableObjectNamespace < TestObject > ;
You can’t perform that action at this time.
0 commit comments