UNPKG

restate-for-dummies

Version:

Type-safe Restate SDK wrapper with simplified API

29 lines 1.88 kB
import type { VirtualObjectDefinition } from "@restatedev/restate-sdk"; import * as restate from "@restatedev/restate-sdk"; import type { ObjectHandlerContext } from "./typed-object"; type BaseEvent<TEventMap, K extends keyof TEventMap> = { event: K; data: TEventMap[K]; }; export type EventUnion<TEventMap> = { [K in keyof TEventMap]: BaseEvent<TEventMap, K>; }[keyof TEventMap]; export type EventSourcedState<TEventMap> = { events: (EventUnion<TEventMap> & { timestamp: number; uuid: string; })[]; }; export type CombinedEventState<TEventMap, TAdditionalState = {}> = EventSourcedState<TEventMap> & Omit<TAdditionalState, "events">; type TransformEventHandlers<TState, THandlers> = { [K in keyof THandlers]: THandlers[K] extends (context: any, data: infer D) => Promise<infer R> ? (ctx: restate.ObjectContext, data: D) => Promise<R> : never; }; export declare function createEventObject<TEventMap extends Record<string, any>, TAdditionalState extends Record<string, any> = {}>(name: string, SerdeClass: new <T>() => restate.Serde<T>): <THandlers extends { [K in keyof TEventMap]: (context: ObjectHandlerContext<EventSourcedState<TEventMap> & Omit<TAdditionalState, "events">> & { eventUuid: string; eventTimestamp: number; }, data: TEventMap[K]) => Promise<any>; }>(handlers: THandlers) => VirtualObjectDefinition<string, TransformEventHandlers<EventSourcedState<TEventMap> & Omit<TAdditionalState, "events">, THandlers>>; export type InferEventType<T> = T extends Record<string, any> ? EventUnion<T> : never; export type InferEventState<T> = T extends Record<string, any> ? EventSourcedState<T> : never; export type InferCombinedState<TEventMap, TAdditionalState = {}> = TEventMap extends Record<string, any> ? CombinedEventState<TEventMap, TAdditionalState> : never; export {}; //# sourceMappingURL=typed-event-object.d.ts.map