import { PluginData } from "knub"; import { Awaitable } from "knub/dist/utils"; import * as t from "io-ts"; import { AutomodContext, AutomodPluginType } from "./types"; export interface AutomodTriggerMatchResult { extraContexts?: AutomodContext[]; extra?: TExtra; silentClean?: boolean; } type AutomodTriggerMatchFn = (meta: { ruleName: string; pluginData: PluginData; context: AutomodContext; triggerConfig: TConfigType; }) => Awaitable>; type AutomodTriggerRenderMatchInformationFn = (meta: { ruleName: string; pluginData: PluginData; contexts: AutomodContext[]; triggerConfig: TConfigType; matchResult: AutomodTriggerMatchResult; }) => Awaitable; export interface AutomodTriggerBlueprint { configType: TConfigType; defaultConfig: Partial>; matchResultType: TMatchResultExtra; match: AutomodTriggerMatchFn, t.TypeOf>; renderMatchInformation: AutomodTriggerRenderMatchInformationFn, t.TypeOf>; } export function automodTrigger( blueprint: AutomodTriggerBlueprint, ): AutomodTriggerBlueprint { return blueprint; } type AutomodActionApplyFn = (meta: { ruleName: string; pluginData: PluginData; contexts: AutomodContext[]; actionConfig: TConfigType; }) => Awaitable; export interface AutomodActionBlueprint { configType: TConfigType; apply: AutomodActionApplyFn>; } export function automodAction( blueprint: AutomodActionBlueprint, ): AutomodActionBlueprint { return blueprint; }