///
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
}