restate-for-dummies
Version:
Type-safe Restate SDK wrapper with simplified API
24 lines • 3.26 kB
TypeScript
import type { ServiceDefinition, VirtualObjectDefinition, WorkflowDefinition } from "@restatedev/restate-sdk";
import * as restate from "@restatedev/restate-sdk";
import type { BaseOpts, RunFunc, RunOpts } from "./utils";
export type TypedRun = <T>(name: string, action: RunFunc<T>, opts?: RunOpts<T>) => restate.RestatePromise<T>;
export type TypedGet<TState> = <K extends keyof TState>(key: K, opts?: BaseOpts<TState[K]>) => Promise<null | TState[K]>;
export type TypedSet<TState> = <K extends keyof TState>(key: K, value: TState[K], opts?: BaseOpts<TState[K]>) => void;
export type TypedClear<TState> = <K extends keyof TState>(key: K) => void;
export interface BaseClientMethods {
object: <THandlers>(object: VirtualObjectDefinition<string, THandlers>, key: string) => restate.Client<THandlers>;
objectSend: <THandlers>(object: VirtualObjectDefinition<string, THandlers>, key: string) => restate.SendClient<THandlers>;
service: <THandlers>(service: ServiceDefinition<string, THandlers>) => restate.Client<THandlers>;
serviceSend: <THandlers>(service: ServiceDefinition<string, THandlers>) => restate.SendClient<THandlers>;
workflow: <THandlers>(workflow: WorkflowDefinition<string, THandlers>, key: string) => restate.Client<THandlers>;
workflowSend: <THandlers>(workflow: WorkflowDefinition<string, THandlers>, key: string) => restate.SendClient<THandlers>;
}
export type TransformObjectHandler<TContext, THandler> = THandler extends (context: TContext, ...args: infer Args) => Promise<infer R> ? Args extends [] ? (ctx: restate.ObjectContext) => Promise<R> : Args extends [infer Arg] ? (ctx: restate.ObjectContext, arg: Arg) => Promise<R> : Args extends [infer Arg1, infer Arg2] ? (ctx: restate.ObjectContext, arg1: Arg1, arg2: Arg2) => Promise<R> : never : never;
export type TransformServiceHandler<TContext, THandler> = THandler extends (context: TContext, ...args: infer Args) => Promise<infer R> ? Args extends [] ? (ctx: restate.Context) => Promise<R> : Args extends [infer Arg] ? (ctx: restate.Context, arg: Arg) => Promise<R> : Args extends [infer Arg1, infer Arg2] ? (ctx: restate.Context, arg1: Arg1, arg2: Arg2) => Promise<R> : never : never;
export type TransformWorkflowHandler<TContext, THandler> = THandler extends (context: TContext, ...args: infer Args) => Promise<infer R> ? Args extends [] ? (ctx: restate.WorkflowContext) => Promise<R> : Args extends [infer Arg] ? (ctx: restate.WorkflowContext, arg: Arg) => Promise<R> : Args extends [infer Arg1, infer Arg2] ? (ctx: restate.WorkflowContext, arg1: Arg1, arg2: Arg2) => Promise<R> : never : never;
export type TransformWorkflowSharedHandler<TContext, THandler> = THandler extends (context: TContext, ...args: infer Args) => Promise<infer R> ? Args extends [] ? (ctx: restate.WorkflowSharedContext) => Promise<R> : Args extends [infer Arg] ? (ctx: restate.WorkflowSharedContext, arg: Arg) => Promise<R> : Args extends [infer Arg1, infer Arg2] ? (ctx: restate.WorkflowSharedContext, arg1: Arg1, arg2: Arg2) => Promise<R> : never : never;
export type BaseHandler<TContext> = (context: TContext, ...args: any[]) => Promise<any>;
export type HandlerCollection<TContext> = {
[key: string]: BaseHandler<TContext>;
};
//# sourceMappingURL=common-types.d.ts.map