/// import { NodePath as Path, VisitNodeObject } from '@babel/traverse'; import { ArrowFunctionExpression, AssignmentExpression, DoExpression, Expression, ExpressionStatement, For, LabeledStatement, Program, Statement, TemplateLiteral, Node, } from '@babel/types'; interface BunchOf { [key: string]: T; } interface BabelState { readonly filename: string; readonly cwd: string; readonly context: S; readonly opts: any; } interface DoExpressive extends DoExpression { readonly meta: ElementInline; readonly expressive_visited?: true; readonly expressive_parent?: Prop; } interface ModifierOutput { readonly attrs?: BunchOf; readonly style?: BunchOf; readonly props?: BunchOf; readonly installed_style?: (ElementModifier | ElementInline)[]; } declare abstract class TraversableBody { protected constructor(); readonly sequence: unknown[]; readonly context: StackFrame; parse(body: Path): void; add(item: unknown): void; } declare abstract class AttributeBody extends TraversableBody { readonly sequence: Attribute[]; readonly props: BunchOf; readonly style: BunchOf; readonly uid: string; insert(item: Prop | ExplicitStyle): void; } declare class ElementInline extends AttributeBody { readonly primaryName?: string; readonly name?: string; readonly children: InnerContent[]; readonly modifiers: ElementModifier[] readonly explicitTagName?: string; readonly doBlock?: DoExpressive; readonly data: BunchOf; adopt(child: InnerContent): void; } declare class ComponentContainer extends ElementInline { readonly statements: Statement[]; } declare class ComponentExpression extends ComponentContainer { private constructor(); readonly exec?: Path; } declare class ComponentIf { private constructor(); readonly forks: Array; readonly test?: Expression; readonly context: StackFrame; readonly hasElementOutput?: boolean; readonly hasStyleOutput?: boolean; readonly parent: ElementInline; } declare class ComponentConsequent extends ElementInline { private constructor() readonly usesClassname?: string; readonly parentElement: ElementInline; readonly parent: ComponentIf; readonly path: Path; readonly test?: Expression; } declare class ComponentFor extends ComponentContainer { private constructor(); readonly node: For; readonly path: Path; readonly context: StackFrame; } declare abstract class Attribute { protected constructor(); readonly name: string | false; readonly node: T | undefined; value: FlatValue | T | undefined; readonly invariant: boolean | undefined; readonly overridden?: boolean; } declare class Prop extends Attribute { constructor(name: string | false, node: FlatValue | Expression | undefined); readonly synthetic?: boolean; } declare class ExplicitStyle extends Attribute { constructor(name: string | false, node: FlatValue | Expression | undefined); priority: number; important: boolean; } interface StackFrame { readonly prefix: string; readonly program: any; readonly styleRoot: any; readonly current: any; readonly currentElement?: ElementInline; readonly currentIf?: ComponentIf; readonly entryIf?: ComponentIf; readonly stateSingleton: BabelState; readonly options: {}; readonly parent: StackFrame; event(ref: symbol): Function; event(ref: symbol, set: Function): void; dispatch(ref: symbol, ...args: any[]): void; resolveFor(as?: string): void; create(node: any): StackFrame; push(node: TraversableBody): void; pop(): void; propertyMod(name: string): ModifyAction; propertyMod(name: string, set: ModifyAction): void; elementMod(name: string): ElementModifier; elementMod(set: ElementModifier): void; hasOwnPropertyMod(name: string): boolean; } declare abstract class ModifierBase extends AttributeBody { forSelector?: string[]; onlyWithin?: ContingentModifier; applicable: Modifier[]; onGlobalStatus?: string[]; priority?: number; addStyle(name: string, value: any): void; } declare class ElementModifier extends ModifierBase { constructor( context: StackFrame, name?: string, body?: Statement ); readonly name: string; readonly next?: ElementModifier; readonly nTargets: number; readonly provides: ElementModifier[]; declare(target: T): void; apply(element: ElementInline): void; } declare class ContingentModifier extends ModifierBase { constructor( context: StackFrame, parent: ContingentModifier | ElementModifier | ElementInline, contingent?: string ) readonly anchor: ElementModifier | ElementInline; } interface ModifyDelegate { readonly name: string; readonly target: AttributeBody; readonly data: BunchOf; readonly priority?: number; readonly arguments?: Array; done?: true; assign(data: any): void; setContingent(contingent: string, priority?: number): void; } declare abstract class ElementConstruct { abstract source: From; abstract Statement(item: Statement): void; abstract Content(item: Expression): void; abstract Child(item: ElementInline): void abstract Props(prop: Prop): void; abstract Style(style: ExplicitStyle): void; abstract Switch(item: ComponentIf): void; abstract Iterate(item: ComponentFor): void; /** * Invoked on all Attributes during `this.parse()` execution. * Will be called regardless if `overridden` is true. * * @param item Props, styles, and spread attributes encountered in source element. * * @returns preventDefault: `true` if type callback should be skipped. * */ Attribute?(item: Attribute): boolean | undefined; /** * @param overridden Prevent drop of named attributes where duplicates do exist. */ parse(overridden?: true): void; /** * Invoked on `this.parse()` prior to scan. * * @param sequence The sequence which is about to be scanned. * * @returns (optional) A new sequence which you want to scan instead. */ willParse?(sequence: SequenceItem[]): SequenceItem[] | void; /** * Invoked on `this.parse()` after last element has been scanned. */ didParse?(): void; } declare const _default: (options: any) => { manipulateOptions: (options: any, parse: any) => void; visitor: { Program: Visitor; }; }; type Visitor = VisitNodeObject, T> type ParseError = (node: Path | T, ...args: FlatValue[]) => Error; type ModifyAction = (this: ModifyDelegate, ...args: any[]) => ModifierOutput | undefined; type FlatValue = string | number | boolean | null; type InnerContent = ElementInline | ComponentIf | ComponentFor | Expression | Expression; type SequenceItem = Attribute | InnerContent | Statement; type Modifier = ElementModifier | ContingentModifier; declare function ParseErrors >(register: O): { readonly [P in keyof O]: ParseError }; export default _default; export { Attribute, AttributeBody, BabelState, ComponentConsequent, ComponentExpression, ComponentFor, ComponentIf, ContingentModifier, DoExpressive, Modifier, ElementConstruct, ElementInline, ElementModifier, ExplicitStyle, ParseErrors, Prop, SequenceItem, StackFrame, Visitor }