@calljmp/cli
Version:
149 lines • 5.76 kB
TypeScript
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