// Type definitions for css-tree 1.0 // Project: https://github.com/csstree/csstree // Definitions by: Erik Källén // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped // TypeScript Version: 2.7 export interface CssLocation { source: string; start: { offset: number; line: number; column: number }; end: { offset: number; line: number; column: number }; } export interface ListItem { prev: ListItem | null; next: ListItem | null; data: TData; } export type IteratorFn> = (this: TContext, item: TData, node: ListItem, list: List) => TResult; export type FilterFn> = (this: TContext, item: TData, node: ListItem, list: List) => item is TResult; export class List { constructor(); fromArray(array: TData[]): List; createItem(data: TData): ListItem; toArray(): TData[]; toJSON(): TData[]; getSize(): number; isEmpty(): boolean; first(): TData | null; last(): TData | null; each(fn: IteratorFn, context: TContext): void; each(fn: IteratorFn): void; forEach(fn: IteratorFn, context: TContext): void; forEach(fn: IteratorFn): void; eachRight(fn: IteratorFn, context: TContext): void; eachRight(fn: IteratorFn): void; forEachRight(fn: IteratorFn, context: TContext): void; forEachRight(fn: IteratorFn): void; nextUntil(start: ListItem, fn: IteratorFn, context: TContext): void; nextUntil(start: ListItem, fn: IteratorFn): void; prevUntil(start: ListItem, fn: IteratorFn, context: TContext): void; prevUntil(start: ListItem, fn: IteratorFn): void; some(fn: IteratorFn, context: TContext): boolean; some(fn: IteratorFn): boolean; map(fn: IteratorFn, context: TContext): List; map(fn: IteratorFn): List; filter(fn: FilterFn, context: TContext): List; filter(fn: FilterFn): List; filter(fn: IteratorFn, context: TContext): List; filter(fn: IteratorFn): List; clear(): void; copy(): List; prepend(item: ListItem): List; prependData(data: TData): List; append(item: ListItem): List; appendData(data: TData): List; insert(item: ListItem, before: ListItem): List; insertData(data: TData, before: ListItem): List; remove(item: ListItem): ListItem; push(item: TData): void; pop(): ListItem | undefined; unshift(data: TData): void; shift(): ListItem | undefined; prependList(list: List): List; appendList(list: List): List; insertList(list: List, before: ListItem): List; replace(oldItem: ListItem, newItemOrList: List | ListItem): List; } export interface CssNodeCommon { type: string; loc?: CssLocation; } export interface AnPlusB extends CssNodeCommon { type: 'AnPlusB'; a: string | null; b: string | null; } export interface Atrule extends CssNodeCommon { type: 'Atrule'; name: string; prelude: AtrulePrelude | Raw | null; block: Block | null; } export interface AtrulePlain extends CssNodeCommon { type: 'Atrule'; name: string; prelude: AtrulePreludePlain | Raw | null; block: BlockPlain | null; } export interface AtrulePrelude extends CssNodeCommon { type: 'AtrulePrelude'; children: List; } export interface AtrulePreludePlain extends CssNodeCommon { type: 'AtrulePrelude'; children: CssNodePlain[]; } export interface AttributeSelector extends CssNodeCommon { type: 'AttributeSelector'; name: Identifier; matcher: string | null; value: StringNode | Identifier | null; flags: string | null; } export interface Block extends CssNodeCommon { type: 'Block'; children: List; } export interface BlockPlain extends CssNodeCommon { type: 'Block'; children: CssNodePlain[]; } export interface Brackets extends CssNodeCommon { type: 'Brackets'; children: List; } export interface BracketsPlain extends CssNodeCommon { type: 'Brackets'; children: CssNodePlain[]; } export interface CDC extends CssNodeCommon { type: 'CDC'; } export interface CDO extends CssNodeCommon { type: 'CDO'; } export interface ClassSelector extends CssNodeCommon { type: 'ClassSelector'; name: string; } export interface Combinator extends CssNodeCommon { type: 'Combinator'; name: string; } export interface Comment extends CssNodeCommon { type: 'Comment'; value: string; } export interface Declaration extends CssNodeCommon { type: 'Declaration'; important: boolean | string; property: string; value: Value | Raw; } export interface DeclarationPlain extends CssNodeCommon { type: 'Declaration'; important: boolean | string; property: string; value: ValuePlain | Raw; } export interface DeclarationList extends CssNodeCommon { type: 'DeclarationList'; children: List; } export interface DeclarationListPlain extends CssNodeCommon { type: 'DeclarationList'; children: CssNodePlain[]; } export interface Dimension extends CssNodeCommon { type: 'Dimension'; value: string; unit: string; } export interface FunctionNode extends CssNodeCommon { type: 'Function'; name: string; children: List; } export interface FunctionNodePlain extends CssNodeCommon { type: 'Function'; name: string; children: CssNodePlain[]; } export interface HexColor extends CssNodeCommon { type: 'HexColor'; value: string; } export interface IdSelector extends CssNodeCommon { type: 'IdSelector'; name: string; } export interface Identifier extends CssNodeCommon { type: 'Identifier'; name: string; } export interface MediaFeature extends CssNodeCommon { type: 'MediaFeature'; name: string; value: Identifier | NumberNode | Dimension | Ratio | null; } export interface MediaQuery extends CssNodeCommon { type: 'MediaQuery'; children: List; } export interface MediaQueryPlain extends CssNodeCommon { type: 'MediaQuery'; children: CssNodePlain[]; } export interface MediaQueryList extends CssNodeCommon { type: 'MediaQueryList'; children: List; } export interface MediaQueryListPlain extends CssNodeCommon { type: 'MediaQueryList'; children: CssNodePlain[]; } export interface Nth extends CssNodeCommon { type: 'Nth'; nth: AnPlusB | Identifier; selector: SelectorList | null; } export interface NthPlain extends CssNodeCommon { type: 'Nth'; nth: AnPlusB | Identifier; selector: SelectorListPlain | null; } export interface NumberNode extends CssNodeCommon { type: 'Number'; value: string; } export interface Operator extends CssNodeCommon { type: 'Operator'; value: string; } export interface Parentheses extends CssNodeCommon { type: 'Parentheses'; children: List; } export interface ParenthesesPlain extends CssNodeCommon { type: 'Parentheses'; children: CssNodePlain[]; } export interface Percentage extends CssNodeCommon { type: 'Percentage'; value: string; } export interface PseudoClassSelector extends CssNodeCommon { type: 'PseudoClassSelector'; name: string; children: List | null; } export interface PseudoClassSelectorPlain extends CssNodeCommon { type: 'PseudoClassSelector'; name: string; children: CssNodePlain[] | null; } export interface PseudoElementSelector extends CssNodeCommon { type: 'PseudoElementSelector'; name: string; children: List | null; } export interface PseudoElementSelectorPlain extends CssNodeCommon { type: 'PseudoElementSelector'; name: string; children: CssNodePlain[] | null; } export interface Ratio extends CssNodeCommon { type: 'Ratio'; left: string; right: string; } export interface Raw extends CssNodeCommon { type: 'Raw'; value: string; } export interface Rule extends CssNodeCommon { type: 'Rule'; prelude: SelectorList | Raw; block: Block; } export interface RulePlain extends CssNodeCommon { type: 'Rule'; prelude: SelectorListPlain | Raw; block: BlockPlain; } export interface Selector extends CssNodeCommon { type: 'Selector'; children: List; } export interface SelectorPlain extends CssNodeCommon { type: 'Selector'; children: CssNodePlain[]; } export interface SelectorList extends CssNodeCommon { type: 'SelectorList'; children: List; } export interface SelectorListPlain extends CssNodeCommon { type: 'SelectorList'; children: CssNodePlain[]; } export interface StringNode extends CssNodeCommon { type: 'String'; value: string; } export interface StyleSheet extends CssNodeCommon { type: 'StyleSheet'; children: List; } export interface StyleSheetPlain extends CssNodeCommon { type: 'StyleSheet'; children: CssNodePlain[]; } export interface TypeSelector extends CssNodeCommon { type: 'TypeSelector'; name: string; } export interface UnicodeRange extends CssNodeCommon { type: 'UnicodeRange'; value: string; } export interface Url extends CssNodeCommon { type: 'Url'; value: StringNode | Raw; } export interface Value extends CssNodeCommon { type: 'Value'; children: List; } export interface ValuePlain extends CssNodeCommon { type: 'Value'; children: CssNodePlain[]; } export interface WhiteSpace extends CssNodeCommon { type: 'WhiteSpace'; value: string; } export type CssNode = AnPlusB | Atrule | AtrulePrelude | AttributeSelector | Block | Brackets | CDC | CDO | ClassSelector | Combinator | Comment | Declaration | DeclarationList | Dimension | FunctionNode | HexColor | IdSelector | Identifier | MediaFeature | MediaQuery | MediaQueryList | Nth | NumberNode | Operator | Parentheses | Percentage | PseudoClassSelector | PseudoElementSelector | Ratio | Raw | Rule | Selector | SelectorList | StringNode | StyleSheet | TypeSelector | UnicodeRange | Url | Value | WhiteSpace; export type CssNodePlain = AnPlusB | AtrulePlain | AtrulePreludePlain | AttributeSelector | BlockPlain | BracketsPlain | CDC | CDO | ClassSelector | Combinator | Comment | DeclarationPlain | DeclarationListPlain | Dimension | FunctionNodePlain | HexColor | IdSelector | Identifier | MediaFeature | MediaQueryPlain | MediaQueryListPlain | NthPlain | NumberNode | Operator | ParenthesesPlain | Percentage | PseudoClassSelectorPlain | PseudoElementSelectorPlain | Ratio | Raw | RulePlain | SelectorPlain | SelectorListPlain | StringNode | StyleSheetPlain | TypeSelector | UnicodeRange | Url | ValuePlain | WhiteSpace; export interface SyntaxParseError extends SyntaxError { input: string; offset: number; rawMessage: string; } export interface ParseOptions { context?: string; atrule?: string; positions?: boolean; onParseError?: (error: SyntaxParseError, fallbackNode: CssNode) => void; filename?: string; offset?: number; line?: number; column?: number; parseAtrulePrelude?: boolean; parseRulePrelude?: boolean; parseValue?: boolean; parseCustomProperty?: boolean; } export function parse(text: string, options?: ParseOptions): CssNode; export interface GenerateHandlers { children: (node: CssNode, delimiter?: (node: CssNode) => void) => void; node: (node: CssNode) => void; chunk: (chunk: string) => void; result: () => string; } export interface GenerateOptions { sourceMap?: boolean; decorator?: (handlers: GenerateHandlers) => GenerateHandlers; } export function generate(ast: CssNode, options?: GenerateOptions): string; export interface WalkContext { root: CssNode; stylesheet: StyleSheet | null; atrule: Atrule | null; atrulePrelude: AtrulePrelude | null; rule: Rule | null; selector: SelectorList | null; block: Block | null; declaration: Declaration | null; function: FunctionNode | PseudoClassSelector | PseudoElementSelector | null; } export type EnterOrLeaveFn = (this: WalkContext, node: NodeType, item: ListItem, list: List) => void; export interface WalkOptionsNoVisit { enter?: EnterOrLeaveFn; leave?: EnterOrLeaveFn; reverse?: boolean; } export interface WalkOptionsVisit { visit: NodeType['type']; enter?: EnterOrLeaveFn; leave?: EnterOrLeaveFn; reverse?: boolean; } export type WalkOptions = WalkOptionsVisit | WalkOptionsVisit | WalkOptionsVisit | WalkOptionsVisit | WalkOptionsVisit | WalkOptionsVisit | WalkOptionsVisit | WalkOptionsVisit | WalkOptionsVisit | WalkOptionsVisit | WalkOptionsVisit | WalkOptionsVisit | WalkOptionsVisit | WalkOptionsVisit | WalkOptionsVisit | WalkOptionsVisit | WalkOptionsVisit | WalkOptionsVisit | WalkOptionsVisit | WalkOptionsVisit | WalkOptionsVisit | WalkOptionsVisit | WalkOptionsVisit | WalkOptionsVisit | WalkOptionsVisit | WalkOptionsVisit | WalkOptionsVisit | WalkOptionsVisit | WalkOptionsVisit | WalkOptionsVisit | WalkOptionsVisit | WalkOptionsVisit | WalkOptionsVisit | WalkOptionsVisit | WalkOptionsVisit | WalkOptionsVisit | WalkOptionsVisit | WalkOptionsVisit | WalkOptionsVisit | WalkOptionsVisit | WalkOptionsNoVisit; export function walk(ast: CssNode, options: EnterOrLeaveFn | WalkOptions): void; export type FindFn = (this: WalkContext, node: CssNode, item: ListItem, list: List) => boolean; export function find(ast: CssNode, fn: FindFn): CssNode; export function findLast(ast: CssNode, fn: FindFn): CssNode; export function findAll(ast: CssNode, fn: FindFn): CssNode[]; export interface Property { readonly basename: string; readonly name: string; readonly hack: string; readonly vendor: string; readonly prefix: string; readonly custom: boolean; } export function property(value: string): Property; export interface Keyword { readonly basename: string; readonly name: string; readonly vendor: string; readonly prefix: string; readonly custom: boolean; } export function keyword(value: string): Keyword; export function clone(node: CssNode): CssNode; export function fromPlainObject(node: CssNodePlain): CssNode; export function toPlainObject(node: CssNode): CssNodePlain;