export declare type AnySelector = ComplexSelector | ContextCompoundSelector | KeyCompoundSelector | ScopeSelector | ClassSelector | AttributeSelector | ForeignAttributeSelector | PseudoClassSelector | PseudoElementSelector; export declare type TopLevelNode = BlockSyntaxVersion | BlockReference | LocalBlockExport | BlockExport | Rule | GlobalDeclaration; export declare type Node = Root | TopLevelNode | AnySelector | Declaration; export interface Name { name: string; asName?: undefined; } export interface Rename { name: string; asName: string; } export interface Root { type: "Root"; children: Array>; } export declare type DefinitionAST = "definition"; export declare type BlockAST = "block"; export declare type DefinitionRoot = Root; export interface BlockSyntaxVersion { type: "BlockSyntaxVersion"; version: number; } export interface BlockReference { type: "BlockReference"; references?: Array; defaultName?: string; fromPath: string; } export interface LocalBlockExport { type: "LocalBlockExport"; exports: Array; } export interface BlockExport { type: "BlockExport"; exports: Array; fromPath: string; } export declare type KeyCompoundSelector = CompoundSelector; export declare type ContextCompoundSelector = CompoundSelector; export declare type ElementSelector = ScopeSelector | ClassSelector; export declare type Selector = ElementSelector | KeyCompoundSelector | ComplexSelector; export interface PseudoElementSelector { type: "PseudoElementSelector"; /** The name of the psuedoelement without the `::` at the beginning. */ name: string; } export interface PseudoClassSelector { type: "PseudoClassSelector"; /** The name of the psuedoclass without the `:` at the beginning. */ name: string; } export interface SelectorAndCombinator { selector: ContextCompoundSelector; combinator: " " | ">" | "+" | "~"; } export interface ComplexSelector { type: "ComplexSelector"; /** There should be at least one context selector. */ contextSelectors: Array>; keySelector: KeyCompoundSelector; } export interface CompoundSelector { type: "CompoundSelector"; element: ElementSelector; attributes?: Array; elementPseudoClasses?: isDefinition extends DefinitionAST ? undefined : (PseudoClassType extends never ? undefined : Array); pseudoElement?: PseudoElementType; pseudoElementPseudoClasses?: isDefinition extends DefinitionAST ? undefined : (PseudoElementSelector extends never ? undefined : (PseudoClassType extends never ? undefined : Array)); } export interface ForeignAttributeSelector { type: "ForeignAttributeSelector"; ns: string; attribute: string; matches?: { matcher: "="; value: string; }; } export interface AttributeSelector { type: "AttributeSelector"; ns?: undefined; attribute: string; matches?: { matcher: "="; value: string; }; } export interface ScopeSelector { type: "ScopeSelector"; value: ":scope"; } export interface ClassSelector { type: "ClassSelector"; /** The name of the class without the `.` at the beginning. */ name: string; } export interface Declaration { type: "Declaration"; property: string; value: string; } export interface Rule { type: "Rule"; selectors: Array>; declarations: Array; } export interface GlobalDeclaration { type: "GlobalDeclaration"; selector: AttributeSelector; } export declare namespace typeguards { function isNode(node: unknown): node is Node; function isRoot(node: unknown): node is Root; function isBlockSyntaxVersion(node: unknown): node is BlockSyntaxVersion; function isBlockReference(node: unknown): node is BlockReference; function isBlockExport(node: unknown): node is BlockExport; function isLocalBlockExport(node: unknown): node is LocalBlockExport; function isPseudoElementSelector(node: unknown): node is PseudoElementSelector; function isPseudoClassSelector(node: unknown): node is PseudoClassSelector; function isComplexSelector(node: unknown): node is ComplexSelector; function isCompoundSelector(node: unknown): node is KeyCompoundSelector | ContextCompoundSelector; function isAttributeSelector(node: unknown): node is AttributeSelector; function isForeignAttributeSelector(node: unknown): node is ForeignAttributeSelector; function isScopeSelector(node: unknown): node is ScopeSelector; function isClassSelector(node: unknown): node is ClassSelector; function isDeclaration(node: unknown): node is Declaration; function isRule(node: unknown): node is Rule; function isGlobalDeclaration(node: unknown): node is GlobalDeclaration; } export declare namespace builders { function root(children?: Array>): Root; function blockSyntaxVersion(version: number): BlockSyntaxVersion; function blockReference(fromPath: string, defaultName: string | undefined, references: Array | undefined): BlockReference; function localBlockExport(exports: Array): LocalBlockExport; function blockExport(fromPath: string, exports: Array): BlockExport; function pseudoElementSelector(name: string): PseudoElementSelector; function pseudoClassSelector(name: string): PseudoClassSelector; function complexSelector(contextSelectors: Array>, keySelector: KeyCompoundSelector): ComplexSelector; function compoundSelector(element: ElementSelector, attributes?: Array, elementPseudoClasses?: isDefinition extends DefinitionAST ? undefined : Array, pseudoElement?: PseudoElementSelector, pseudoElementPseudoClasses?: isDefinition extends DefinitionAST ? undefined : Array): CompoundSelector; function keyCompoundSelector(element: ElementSelector, attributes?: Array, elementPseudoClasses?: isDefinition extends DefinitionAST ? undefined : Array, pseudoElement?: PseudoElementSelector, pseudoElementPseudoClasses?: isDefinition extends DefinitionAST ? undefined : Array): KeyCompoundSelector; function contextCompoundSelector(element: ElementSelector, attributes?: Array, elementPseudoClasses?: isDefinition extends DefinitionAST ? undefined : Array, pseudoElementPseudoClasses?: isDefinition extends DefinitionAST ? undefined : Array): ContextCompoundSelector; function attributeSelector(attribute: string, value?: string): AttributeSelector; function foreignAttributeSelector(ns: string, attribute: string, value?: string): ForeignAttributeSelector; function scopeSelector(): ScopeSelector; function classSelector(name: string): ClassSelector; function declaration(property: string, value: string): Declaration; function rule(selectors: Array>, declarations: Array): Rule; function globalDeclaration(selector: AttributeSelector): GlobalDeclaration; } export interface Visitor { Root?(root: Root): void | boolean | undefined; BlockSyntaxVersion?(blockSyntaxVersion: BlockSyntaxVersion): void | boolean | undefined; BlockReference?(blockReference: BlockReference): void | boolean | undefined; LocalBlockExport?(localBlockExport: LocalBlockExport): void | boolean | undefined; BlockExport?(blockExport: BlockExport): void | boolean | undefined; PseudoElementSelector?(pseudoElementSelector: PseudoElementSelector): void | boolean | undefined; PseudoClassSelector?(pseudoClassSelector: PseudoClassSelector): void | boolean | undefined; ComplexSelector?(complexSelector: ComplexSelector): void | boolean | undefined; CompoundSelector?(compoundSelector: KeyCompoundSelector | ContextCompoundSelector): void | boolean | undefined; AttributeSelector?(attributeSelector: AttributeSelector): void | boolean | undefined; ForeignAttributeSelector?(foreignAttributeSelector: ForeignAttributeSelector): void | boolean | undefined; ScopeSelector?(scopeSelector: ScopeSelector): void | boolean | undefined; ClassSelector?(classSelector: ClassSelector): void | boolean | undefined; Declaration?(declaration: Declaration): void | boolean | undefined; Rule?(rule: Rule): void | boolean | undefined; GlobalDeclaration?(globalDeclaration: GlobalDeclaration): void | boolean | undefined; } export interface Mapper { Root?(children: Array>): Root; BlockSyntaxVersion?(version: number): BlockSyntaxVersion; BlockReference?(fromPath: string, defaultName: string | undefined, references: Array | undefined): BlockReference; LocalBlockExport?(exports: Array): LocalBlockExport; BlockExport?(fromPath: string, exports: Array): BlockExport; PseudoElementSelector?(name: string): PseudoElementSelector; PseudoClassSelector?(name: string): PseudoClassSelector; ComplexSelector?(contextSelectors: Array>, keySelector: KeyCompoundSelector): ComplexSelector; CompoundSelector?(element: ElementSelector, attributes?: Array, elementPseudoClasses?: Array, pseudoElement?: PseudoElementSelector, pseudoElementPseudoClasses?: Array): KeyCompoundSelector | ContextCompoundSelector; AttributeSelector?(attribute: string, value?: string): AttributeSelector; ForeignAttributeSelector?(ns: string, attribute: string, value?: string): ForeignAttributeSelector; ScopeSelector?(): ScopeSelector; ClassSelector?(name: string): ClassSelector; Declaration?(property: string, value: string): Declaration; Rule?(selectors: Array>, declarations: Array): Rule; GlobalDeclaration?(selector: AttributeSelector): GlobalDeclaration; } export declare function map>(mapper: Mapper, node: N, fromType: isFromDefinition, toType: isToDefinition): N extends Root ? Root : (N extends Rule ? Rule : (N extends ComplexSelector ? ComplexSelector : (N extends ContextCompoundSelector ? ContextCompoundSelector : (N extends KeyCompoundSelector ? KeyCompoundSelector : N)))); export declare function visit(visitor: Visitor, node: Node): void; //# sourceMappingURL=ast.d.ts.map