UNPKG

@calljmp/cli

Version:
149 lines 5.76 kB
export type SignalFilter<T = unknown> = SignalLogicalFilter<T> | SignalFieldFilter<T>; export interface SignalLogicalFilter<T = unknown> { $and?: SignalFilter<T>[]; $or?: SignalFilter<T>[]; $not?: SignalFilter<T>; } export type SignalFieldFilter<T = unknown> = { [K in DotPaths<T>]?: SignalCondition; }; export type SignalCondition = SignalEqCondition | SignalNeCondition | SignalInCondition | SignalGtCondition | SignalGteCondition | SignalLtCondition | SignalLteCondition | SignalLikeCondition | SignalILikeCondition | SignalRegexCondition | SignalExistsCondition; export interface SignalEqCondition { $eq: SignalPrimitive; } export interface SignalNeCondition { $ne: SignalPrimitive; } export interface SignalInCondition { $in: SignalPrimitive[]; } export interface SignalGtCondition { $gt: number; } export interface SignalGteCondition { $gte: number; } export interface SignalLtCondition { $lt: number; } export interface SignalLteCondition { $lte: number; } export interface SignalLikeCondition { $like: string; } export interface SignalILikeCondition { $ilike: string; } export interface SignalRegexCondition { $regex: string; } export interface SignalExistsCondition { $exists: boolean; } export type SignalPrimitive = string | number | boolean | null; export declare enum SignalMessageType { Ping = "ping", Pong = "pong", Subscribe = "subscribe", Unsubscribe = "unsubscribe", Publish = "publish", Data = "data", Error = "error", Ack = "ack", Config = "config" } interface SignalMessageBase { type: SignalMessageType; id: string; } export interface SignalMessageAck extends SignalMessageBase { type: SignalMessageType.Ack; } export interface SignalMessagePing extends SignalMessageBase { type: SignalMessageType.Ping; } export interface SignalMessagePong extends SignalMessageBase { type: SignalMessageType.Pong; } export interface SignalMessageSubscribe extends SignalMessageBase { type: SignalMessageType.Subscribe; topic: string; fields?: string[]; filter?: SignalFilter; } export interface SignalMessageUnsubscribe extends SignalMessageBase { type: SignalMessageType.Unsubscribe; topic: string; } export interface SignalMessagePublish extends SignalMessageBase { type: SignalMessageType.Publish; topic: string; data: Record<string, unknown>; } export interface SignalMessageData extends SignalMessageBase { type: SignalMessageType.Data; topic: string; data: Record<string, unknown>; } export interface SignalMessageConfig extends SignalMessageBase { type: SignalMessageType.Config; [key: string]: unknown; } export declare enum SignalDatabaseEventType { Insert = "insert", Update = "update", Delete = "delete" } export type SignalDatabaseTopic = `database.${string}.${SignalDatabaseEventType}`; export type SignalDatabaseRowId = number; export interface SignalDatabaseRow { [key: string]: unknown; } export type SignalDatabaseData = SignalDatabaseInsert | SignalDatabaseUpdate | SignalDatabaseDelete; export interface SignalDatabaseDataBase extends Omit<SignalMessageData, 'data'> { topic: SignalDatabaseTopic; eventType: SignalDatabaseEventType; } export interface SignalDatabaseInsert extends SignalDatabaseDataBase { eventType: SignalDatabaseEventType.Insert; rows: SignalDatabaseRow[]; } export interface SignalDatabaseUpdate extends SignalDatabaseDataBase { eventType: SignalDatabaseEventType.Update; rows: SignalDatabaseRow[]; } export interface SignalDatabaseDelete extends SignalDatabaseDataBase { eventType: SignalDatabaseEventType.Delete; rowIds: SignalDatabaseRowId[]; } export interface SignalDatabaseSubscribe extends SignalMessageSubscribe { topic: SignalDatabaseTopic; } export interface SignalDatabaseUnsubscribe extends SignalMessageUnsubscribe { topic: SignalDatabaseTopic; } export declare enum SignalErrorCode { NotFound = "not_found", InternalError = "internal_error", InvalidMessage = "invalid_message" } export interface SignalMessageError extends SignalMessageBase { type: SignalMessageType.Error; code: SignalErrorCode; message: string; } export type SignalMessage = SignalMessagePing | SignalMessagePong | SignalMessageSubscribe | SignalMessageUnsubscribe | SignalMessagePublish | SignalMessageError | SignalMessageAck | SignalMessageData | SignalMessageConfig | SignalDatabaseData | SignalDatabaseSubscribe | SignalDatabaseUnsubscribe; export type DotPaths<T, Prefix extends string = ''> = { [K in keyof T]: T[K] extends object ? T[K] extends Array<any> ? `${Prefix}${K & string}` : `${Prefix}${K & string}` | DotPaths<T[K], `${Prefix}${K & string}.`> : `${Prefix}${K & string}`; }[keyof T]; export type ProjectedType<T, Fields extends readonly string[]> = { [K in keyof T as ShouldIncludeKey<K, Fields> extends true ? K : never]: K extends string ? HasNestedFields<K, Fields> extends true ? T[K] extends Record<string, any> ? ProjectedType<T[K], FilterNestedFields<K, Fields>> : never : T[K] : never; }; type ShouldIncludeKey<K, Fields extends readonly string[]> = K extends Fields[number] ? true : K extends string ? Extract<Fields[number], `${K}.${string}`> extends never ? false : true : false; type HasNestedFields<K extends string, Fields extends readonly string[]> = Extract<Fields[number], `${K}.${string}`> extends never ? false : true; type FilterNestedFields<K extends string, Fields extends readonly string[]> = { [I in keyof Fields]: Fields[I] extends `${K}.${infer Rest}` ? Rest : never; } extends readonly (infer U)[] ? U extends string ? readonly U[] : readonly never[] : readonly never[]; export {}; //# sourceMappingURL=signal.d.ts.map