import { isoly } from "isoly" import { Realm } from "../Realm" export type Base = { realm?: Realm organization?: string account?: string entity: string entityType: string action: Base.Action created: isoly.DateTime isError?: true meta?: any value: T } export namespace Base { export type Action = (typeof Action.values)[number] export namespace Action { export const values = ["created", "updated", "cancelled", "removed", "inactivated"] as const } export type Data = { realm?: Realm; organization?: string; account?: string; isError?: true; meta?: any } export type Create, D extends Data = Record> = (...args: [T, Action, D?]) => B export function pipeToSender, D extends Data = Record>( mapper: Base.Create ): (sender: (backup: B) => any | Promise) => (...args: Parameters) => ReturnType { return sender => (...args) => { const backup = mapper(...args) return sender(backup) } } }