From 1635c282c66175455a4856d6471414f908259aee Mon Sep 17 00:00:00 2001 From: Fredrik Enestad Date: Thu, 26 Sep 2024 15:03:02 +0200 Subject: [PATCH] client type definitions --- runtimes/js/encore.dev/api/mod.ts | 40 ++++++++++++++++++++++++++----- 1 file changed, 34 insertions(+), 6 deletions(-) diff --git a/runtimes/js/encore.dev/api/mod.ts b/runtimes/js/encore.dev/api/mod.ts index 3bd0ae28f0..035cb2ebad 100644 --- a/runtimes/js/encore.dev/api/mod.ts +++ b/runtimes/js/encore.dev/api/mod.ts @@ -129,12 +129,36 @@ api.raw = function raw(options: APIOptions, fn: RawHandler) { export interface StreamIn extends AsyncIterable { recv: () => Promise; } +export interface StreamOutWithResponse + extends StreamOut { + response: () => Promise; +} export interface StreamOut { send: (msg: Response) => Promise; close: () => Promise; } +type StreamInOutHandlerFn = + HandshakeData extends void + ? () => Promise> + : (data: HandshakeData) => Promise>; + +type StreamOutHandlerFn = HandshakeData extends void + ? () => Promise> + : (data: HandshakeData) => Promise>; + +type StreamInHandlerFn = + HandshakeData extends void + ? Response extends void + ? () => Promise> + : () => Promise> + : Response extends void + ? (data: HandshakeData) => Promise> + : ( + data: HandshakeData + ) => Promise>; + export type StreamInOut = StreamIn & StreamOut; @@ -144,23 +168,27 @@ function streamInOut( data: HandshakeData, stream: StreamInOut ) => Promise -): void; +): StreamInOutHandlerFn; function streamInOut( options: StreamOptions, fn: (stream: StreamInOut) => Promise -): void; +): StreamInOutHandlerFn; function streamInOut(options: StreamOptions, fn: any): typeof fn { return fn; } +function streamIn( + options: StreamOptions, + fn: (stream: StreamIn) => Promise +): StreamInHandlerFn; function streamIn( options: StreamOptions, fn: (stream: StreamIn) => Promise -): void; +): StreamInHandlerFn; function streamIn( options: StreamOptions, fn: (data: HandshakeData, stream: StreamIn) => Promise -): void; +): StreamInHandlerFn; function streamIn(options: StreamOptions, fn: any): typeof fn { return fn; } @@ -168,11 +196,11 @@ function streamIn(options: StreamOptions, fn: any): typeof fn { function streamOut( options: StreamOptions, fn: (data: HandshakeData, stream: StreamOut) => Promise -): void; +): StreamOutHandlerFn; function streamOut( options: StreamOptions, fn: (stream: StreamOut) => Promise -): void; +): StreamOutHandlerFn; function streamOut(options: StreamOptions, fn: any): typeof fn { return fn; }