import { Background, DataTable, DocString, Document, Examples, Feature, Rule, Scenario, ScenarioOutline, Step, TableRow, Tag } from "gherkin-ast"; export type SingleControlType = void | null | undefined | T; export type MultiControlType = void | null | undefined | T | T[]; export type SingleEventHandler = (e: T, p?: P) => SingleControlType | Promise>; export type MultiEventHandler = (e: T, p?: P, i?: number) => MultiControlType | Promise>; export type FilterEventHandler = (e: T, p?: P, i?: number) => boolean | Promise; export interface PreCompiler { onDocument?: SingleEventHandler; onFeature?: MultiEventHandler; onRule?: MultiEventHandler; onScenario?: MultiEventHandler; onScenarioOutline?: MultiEventHandler; onBackground?: SingleEventHandler; onExamples?: MultiEventHandler; onStep?: MultiEventHandler; onTag?: MultiEventHandler; onDocString?: SingleEventHandler; onDataTable?: SingleEventHandler; onTableRow?: MultiEventHandler; preFeature?: FilterEventHandler; postFeature?: FilterEventHandler; preRule?: FilterEventHandler; postRule?: FilterEventHandler; preScenario?: FilterEventHandler; postScenario?: FilterEventHandler; preScenarioOutline?: FilterEventHandler; postScenarioOutline?: FilterEventHandler; preBackground?: FilterEventHandler; postBackground?: FilterEventHandler; preExamples?: FilterEventHandler; postExamples?: FilterEventHandler; preStep?: FilterEventHandler; postStep?: FilterEventHandler; preTag?: FilterEventHandler; postTag?: FilterEventHandler; preDocString?: FilterEventHandler; postDocString?: FilterEventHandler; preDataTable?: FilterEventHandler; postDataTable?: FilterEventHandler; preTableRow?: FilterEventHandler; postTableRow?: FilterEventHandler; }