import { AllSelector, AndSelector, AttributeSelector, ChildSelector, ClassSelector, CSSNode, CSSStyleSheet, DescendantSelector, ElementSelector, FirstChild, IdSelector, ImmediatePrecedeSelector, LastChild, NotSelector, NthChild, NthLastChild, OrSelector, PrecedeSelector, PseudoClassSelector, PseudoElementSelector, StyleDeclaration, StyleRule } from "./css/ast"; import { AndExpression, EqualExpression, FieldSelector, FuncCallExpression, IsExpression, JoinClause, LikeExpression, OrExpression, SqssNode, SqssStyleSheet, StyleAssignment, UpdateStatement } from "./sqss/ast"; export declare type Agg = { [Key in keyof Node]: Node[Key] extends (infer N)[] ? N extends BaseNode ? Val[] : never : Node[Key] extends BaseNode ? Val : never; }; declare type PreStr = T extends string ? (string extends T ? never : `preVisit${T}`) : never; declare type PostStr = T extends string ? (string extends T ? never : `postVisit${T}`) : never; declare type PrePostStr = PreStr | PostStr; declare type PreFunc = (node: Node, context: Ctx) => Ctx; declare type PostFunc = (node: Node, context: Ctx, data: Agg) => Val; declare type PrePostFunc = P extends PreStr ? PreFunc : PostFunc; declare type PrePostHook = { [P in PrePostStr]?: PrePostFunc; }; export declare type SQSSVisitor = PrePostHook<"AndExpression", AndExpression, SqssNode, Val, Ctx> & PrePostHook<"EqualExpression", EqualExpression, SqssNode, Val, Ctx> & PrePostHook<"FieldSelector", FieldSelector, SqssNode, Val, Ctx> & PrePostHook<"FuncCallExpression", FuncCallExpression, SqssNode, Val, Ctx> & PrePostHook<"IsExpression", IsExpression, SqssNode, Val, Ctx> & PrePostHook<"JoinClause", JoinClause, SqssNode, Val, Ctx> & PrePostHook<"LikeExpression", LikeExpression, SqssNode, Val, Ctx> & PrePostHook<"OrExpression", OrExpression, SqssNode, Val, Ctx> & PrePostHook<"SqssStyleSheet", SqssStyleSheet, SqssNode, Val, Ctx> & PrePostHook<"StyleAssignment", StyleAssignment, SqssNode, Val, Ctx> & PrePostHook<"UpdateStatement", UpdateStatement, SqssNode, Val, Ctx>; export declare type CSSVisitor = PrePostHook<"CSSStyleSheet", CSSStyleSheet, CSSNode, Val, Ctx> & PrePostHook<"StyleRule", StyleRule, CSSNode, Val, Ctx> & PrePostHook<"StyleDeclaration", StyleDeclaration, CSSNode, Val, Ctx> & PrePostHook<"AndSelector", AndSelector, CSSNode, Val, Ctx> & PrePostHook<"OrSelector", OrSelector, CSSNode, Val, Ctx> & PrePostHook<"ElementSelector", ElementSelector, CSSNode, Val, Ctx> & PrePostHook<"IdSelector", IdSelector, CSSNode, Val, Ctx> & PrePostHook<"ClassSelector", ClassSelector, CSSNode, Val, Ctx> & PrePostHook<"AttributeSelector", AttributeSelector, CSSNode, Val, Ctx> & PrePostHook<"PseudoClassSelector", PseudoClassSelector, CSSNode, Val, Ctx> & PrePostHook<"PseudoElementSelector", PseudoElementSelector, CSSNode, Val, Ctx> & PrePostHook<"NotSelector", NotSelector, CSSNode, Val, Ctx> & PrePostHook<"AllSelector", AllSelector, CSSNode, Val, Ctx> & PrePostHook<"FirstChild", FirstChild, CSSNode, Val, Ctx> & PrePostHook<"LastChild", LastChild, CSSNode, Val, Ctx> & PrePostHook<"NthChild", NthChild, CSSNode, Val, Ctx> & PrePostHook<"NthLastChild", NthLastChild, CSSNode, Val, Ctx> & PrePostHook<"DescendantSelector", DescendantSelector, CSSNode, Val, Ctx> & PrePostHook<"ChildSelector", ChildSelector, CSSNode, Val, Ctx> & PrePostHook<"ImmediatePrecedeSelector", ImmediatePrecedeSelector, CSSNode, Val, Ctx> & PrePostHook<"PrecedeSelector", PrecedeSelector, CSSNode, Val, Ctx>; export declare type Visitor = SQSSVisitor | CSSVisitor; export {};