UNPKG

@types/css-tree

Version:
918 lines (801 loc) 23.2 kB
export interface CssLocation { source: string; start: { offset: number; line: number; column: number; }; end: { offset: number; line: number; column: number; }; } export interface ListItem<TData> { prev: ListItem<TData> | null; next: ListItem<TData> | null; data: TData; } export type IteratorFn<TData, TResult, TContext = List<TData>> = ( this: TContext, item: TData, node: ListItem<TData>, list: List<TData>, ) => TResult; export type FilterFn<TData, TResult extends TData, TContext = List<TData>> = ( this: TContext, item: TData, node: ListItem<TData>, list: List<TData>, ) => item is TResult; export type ReduceFn<TData, TValue, TContext = List<TData>> = (this: TContext, accum: TValue, data: TData) => TValue; export class List<TData> { constructor(); get size(): number; get isEmpty(): boolean; get first(): TData | null; get last(): TData | null; [Symbol.iterator](): IterableIterator<TData>; fromArray(array: TData[]): List<TData>; createItem(data: TData): ListItem<TData>; toArray(): TData[]; toJSON(): TData[]; forEach<TContext>(fn: IteratorFn<TData, void, TContext>, context: TContext): void; forEach(fn: IteratorFn<TData, void>): void; forEachRight<TContext>(fn: IteratorFn<TData, void, TContext>, context: TContext): void; forEachRight(fn: IteratorFn<TData, void>): void; nextUntil<TContext>(start: ListItem<TData>, fn: IteratorFn<TData, boolean, TContext>, context: TContext): void; nextUntil(start: ListItem<TData>, fn: IteratorFn<TData, boolean>): void; prevUntil<TContext>(start: ListItem<TData>, fn: IteratorFn<TData, boolean, TContext>, context: TContext): void; prevUntil(start: ListItem<TData>, fn: IteratorFn<TData, boolean>): void; reduce<TValue, TContext>(fn: ReduceFn<TData, TValue, TContext>, initialValue: TValue, context: TContext): TValue; reduce<TValue>(fn: ReduceFn<TData, TValue>, initialValue: TValue): TValue; reduceRight<TValue, TContext>( fn: ReduceFn<TData, TValue, TContext>, initialValue: TValue, context: TContext, ): TValue; reduceRight<TValue>(fn: ReduceFn<TData, TValue>, initialValue: TValue): TValue; some<TContext>(fn: IteratorFn<TData, boolean, TContext>, context: TContext): boolean; some(fn: IteratorFn<TData, boolean>): boolean; map<TContext, TResult>(fn: IteratorFn<TData, TResult, TContext>, context: TContext): List<TResult>; map<TResult>(fn: IteratorFn<TData, TResult>): List<TResult>; filter<TContext, TResult extends TData>(fn: FilterFn<TData, TResult, TContext>, context: TContext): List<TResult>; filter<TResult extends TData>(fn: FilterFn<TData, TResult>): List<TResult>; filter<TContext>(fn: IteratorFn<TData, boolean, TContext>, context: TContext): List<TData>; filter(fn: IteratorFn<TData, boolean>): List<TData>; clear(): void; copy(): List<TData>; prepend(item: ListItem<TData>): List<TData>; prependData(data: TData): List<TData>; append(item: ListItem<TData>): List<TData>; appendData(data: TData): List<TData>; insert(item: ListItem<TData>, before: ListItem<TData>): List<TData>; insertData(data: TData, before: ListItem<TData>): List<TData>; remove(item: ListItem<TData>): ListItem<TData>; push(item: TData): void; pop(): ListItem<TData> | undefined; unshift(data: TData): void; shift(): ListItem<TData> | undefined; prependList(list: List<TData>): List<TData>; appendList(list: List<TData>): List<TData>; insertList(list: List<TData>, before: ListItem<TData>): List<TData>; replace(oldItem: ListItem<TData>, newItemOrList: List<TData> | ListItem<TData>): List<TData>; } export interface CssNodeCommon { type: string; loc?: CssLocation | undefined; } 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<CssNode>; } 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<CssNode>; } export interface BlockPlain extends CssNodeCommon { type: "Block"; children: CssNodePlain[]; } export interface Brackets extends CssNodeCommon { type: "Brackets"; children: List<CssNode>; } 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<CssNode>; } 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<CssNode>; } export interface FunctionNodePlain extends CssNodeCommon { type: "Function"; name: string; children: CssNodePlain[]; } export interface Hash extends CssNodeCommon { type: "Hash"; 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<CssNode>; } export interface MediaQueryPlain extends CssNodeCommon { type: "MediaQuery"; children: CssNodePlain[]; } export interface MediaQueryList extends CssNodeCommon { type: "MediaQueryList"; children: List<CssNode>; } export interface MediaQueryListPlain extends CssNodeCommon { type: "MediaQueryList"; children: CssNodePlain[]; } export interface NestingSelector extends CssNodeCommon { type: "NestingSelector"; } 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<CssNode>; } 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<CssNode> | null; } export interface PseudoClassSelectorPlain extends CssNodeCommon { type: "PseudoClassSelector"; name: string; children: CssNodePlain[] | null; } export interface PseudoElementSelector extends CssNodeCommon { type: "PseudoElementSelector"; name: string; children: List<CssNode> | 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<CssNode>; } export interface SelectorPlain extends CssNodeCommon { type: "Selector"; children: CssNodePlain[]; } export interface SelectorList extends CssNodeCommon { type: "SelectorList"; children: List<CssNode>; } 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<CssNode>; } 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: string; } export interface Value extends CssNodeCommon { type: "Value"; children: List<CssNode>; } 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 | Hash | IdSelector | Identifier | MediaFeature | MediaQuery | MediaQueryList | NestingSelector | 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 | Hash | 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; formattedMessage: string; } export interface ParseOptions { context?: string | undefined; atrule?: string | undefined; positions?: boolean | undefined; onComment?: (value: string, loc: CssLocation) => void; onParseError?: ((error: SyntaxParseError, fallbackNode: CssNode) => void) | undefined; filename?: string | undefined; offset?: number | undefined; line?: number | undefined; column?: number | undefined; parseAtrulePrelude?: boolean | undefined; parseRulePrelude?: boolean | undefined; parseValue?: boolean | undefined; parseCustomProperty?: boolean | undefined; } 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 | undefined; decorator?: ((handlers: GenerateHandlers) => GenerateHandlers) | undefined; mode?: "safe" | "spec" | undefined; } export function generate(ast: CssNode, options?: GenerateOptions): string; export interface WalkContext { /** * Stops traversal. No visitor function will be invoked once this value is * returned by a visitor. */ break: symbol; /** * Prevent the current node from being iterated. No visitor function will be * invoked for its properties or children nodes; note that this value only * has an effect for enter visitor as leave visitor invokes after iterating * over all node's properties and children. */ skip: symbol; 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<NodeType = CssNode> = ( this: WalkContext, node: NodeType, item: ListItem<CssNode>, list: List<CssNode>, ) => void; export interface WalkOptionsNoVisit { enter?: EnterOrLeaveFn | undefined; leave?: EnterOrLeaveFn | undefined; reverse?: boolean | undefined; } export interface WalkOptionsVisit<NodeType extends CssNode = CssNode> { visit: NodeType["type"]; enter?: EnterOrLeaveFn<NodeType> | undefined; leave?: EnterOrLeaveFn<NodeType> | undefined; reverse?: boolean | undefined; } export type WalkOptions = | WalkOptionsVisit<AnPlusB> | WalkOptionsVisit<Atrule> | WalkOptionsVisit<AtrulePrelude> | WalkOptionsVisit<AttributeSelector> | WalkOptionsVisit<Block> | WalkOptionsVisit<Brackets> | WalkOptionsVisit<CDC> | WalkOptionsVisit<CDO> | WalkOptionsVisit<ClassSelector> | WalkOptionsVisit<Combinator> | WalkOptionsVisit<Comment> | WalkOptionsVisit<Declaration> | WalkOptionsVisit<DeclarationList> | WalkOptionsVisit<Dimension> | WalkOptionsVisit<FunctionNode> | WalkOptionsVisit<Hash> | WalkOptionsVisit<IdSelector> | WalkOptionsVisit<Identifier> | WalkOptionsVisit<MediaFeature> | WalkOptionsVisit<MediaQuery> | WalkOptionsVisit<MediaQueryList> | WalkOptionsVisit<Nth> | WalkOptionsVisit<NumberNode> | WalkOptionsVisit<Operator> | WalkOptionsVisit<Parentheses> | WalkOptionsVisit<Percentage> | WalkOptionsVisit<PseudoClassSelector> | WalkOptionsVisit<PseudoElementSelector> | WalkOptionsVisit<Ratio> | WalkOptionsVisit<Raw> | WalkOptionsVisit<Rule> | WalkOptionsVisit<Selector> | WalkOptionsVisit<SelectorList> | WalkOptionsVisit<StringNode> | WalkOptionsVisit<StyleSheet> | WalkOptionsVisit<TypeSelector> | WalkOptionsVisit<UnicodeRange> | WalkOptionsVisit<Url> | WalkOptionsVisit<Value> | WalkOptionsVisit<WhiteSpace> | WalkOptionsNoVisit; export const walk: { (ast: CssNode, options: EnterOrLeaveFn | WalkOptions): void; /** * Stops traversal. No visitor function will be invoked once this value is returned by a visitor. */ readonly break: symbol; /** * Prevent the current node from being iterated. No visitor function will be invoked for its properties or children * nodes; note that this value only has an effect for enter visitor as leave visitor invokes after iterating over * all node's properties and children. */ readonly skip: symbol; }; export type FindFn = (this: WalkContext, node: CssNode, item: ListItem<CssNode>, list: List<CssNode>) => boolean; export function find(ast: CssNode, fn: FindFn): CssNode | null; export function findLast(ast: CssNode, fn: FindFn): CssNode | null; 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; /** * Definition syntax AtWord node */ export interface DSNodeAtWord { type: "AtKeyword"; name: string; } /** * Definition syntax Comma node */ export interface DSNodeComma { type: "Comma"; } /** * Definition syntax Function node */ export interface DSNodeFunction { type: "Function"; name: string; } export type DSNodeCombinator = "|" | "||" | "&&" | " "; /** * Definition syntax Group node */ export interface DSNodeGroup { type: "Group"; terms: DSNode[]; combinator: DSNodeCombinator; disallowEmpty: boolean; explicit: boolean; } /** * Definition syntax Keyword node */ export interface DSNodeKeyword { type: "Keyword"; name: string; } /** * Definition syntax Multiplier node */ export interface DSNodeMultiplier { type: "Multiplier"; comma: boolean; min: number; max: number; term: DSNodeMultiplied; } /** * Definition syntax Property node */ export interface DSNodeProperty { type: "Property"; name: string; } /** * Definition syntax String node */ export interface DSNodeString { type: "String"; value: string; } /** * Definition syntax Token node */ export interface DSNodeToken { type: "Token"; value: string; } /** * Definition syntax Type node options */ export interface DSNodeTypeOpts { type: "Range"; min: number | null; max: number | null; } /** * Definition syntax Type node */ export interface DSNodeType { type: "Type"; name: string; opts: DSNodeTypeOpts | null; } /** * Definition syntax node */ export type DSNode = | DSNodeAtWord | DSNodeComma | DSNodeFunction | DSNodeGroup | DSNodeKeyword | DSNodeMultiplier | DSNodeProperty | DSNodeString | DSNodeToken | DSNodeType; /** * Definition syntax node compatible with a multiplier */ export type DSNodeMultiplied = | DSNodeFunction | DSNodeGroup | DSNodeKeyword | DSNodeProperty | DSNodeString | DSNodeType; /** * Definition syntax generate options */ export interface DSGenerateOptions { forceBraces?: boolean | undefined; compact?: boolean | undefined; decorate?: ((result: string, node: DSNode) => void) | undefined; } /** * Definition syntax walk options */ export interface DSWalkOptions { enter?: DSWalkEnterOrLeaveFn | undefined; leave?: DSWalkEnterOrLeaveFn | undefined; } /** * Definition syntax walk callback */ export type DSWalkEnterOrLeaveFn = (node: DSNode) => void; /** * DefinitionSyntax */ export interface DefinitionSyntax { /** * Generates CSS value definition syntax from an AST * * @param node - The AST * @param options - Options that affect generation * * @example * generate({type: 'Keyword', name: 'foo'}) => 'foo' */ generate(node: DSNode, options?: DSGenerateOptions): string; /** * Generates an AST from a CSS value syntax * * @param source - The CSS value syntax to parse * * @example * parse('foo | bar') => * { * type: 'Group', * terms: [ * { type: 'Keyword', name: 'foo' }, * { type: 'Keyword', name: 'bar' } * ], * combinator: '|', * disallowEmpty: false, * explicit: false * } */ parse(source: string): DSNodeGroup; /** * Walks definition syntax AST */ walk(node: DSNode, options: DSWalkEnterOrLeaveFn | DSWalkOptions, context?: any): void; /** * Wrapper for syntax errors */ syntaxError: SyntaxError; } export const definitionSyntax: DefinitionSyntax; export const ident: { decode(input: string): string; encode(input: string): string; }; export const string: { encode(input: string, apostrophe?: boolean): string; decode(input: string): string; }; export const url: { decode(input: string): string; encode(input: string): string; }; export class SyntaxMatchError extends SyntaxError { rawMessage: string; syntax: string; css: string; mismatchOffset: number; mismatchLength: number; offset: number; line: number; column: number; loc: { source: string; start: { offset: number; line: number; column: number }; end: { offset: number; line: number; column: number }; }; } export class SyntaxReferenceError extends SyntaxError { reference: string; } export interface LexerMatchResult { error: Error | SyntaxMatchError | SyntaxReferenceError | null; } export class Lexer { matchAtruleDescriptor(atruleName: string, descriptorName: string, value: CssNode | string): LexerMatchResult; matchAtrulePrelude(atruleName: string, prelude: CssNode | string): LexerMatchResult; matchDeclaration(node: CssNode): LexerMatchResult; matchProperty(propertyName: string, value: CssNode | string): LexerMatchResult; matchType(typeName: string, value: CssNode | string): LexerMatchResult; match(syntax: DSNode | string, value: CssNode | string): LexerMatchResult; } export const lexer: Lexer; export function fork(extension: { atrules?: Record<string, string> | undefined; properties?: Record<string, string> | undefined; types?: Record<string, string> | undefined; cssWideKeywords?: Array<string> | undefined; }): { lexer: Lexer };