UNPKG

parsel-js

Version:

A tiny, permissive CSS selector parser

118 lines (117 loc) 3.56 kB
export declare const TOKENS: Record<string, RegExp>; export declare const TRIM_TOKENS: Set<string>; export declare const RECURSIVE_PSEUDO_CLASSES: Set<string>; export declare const RECURSIVE_PSEUDO_CLASSES_ARGS: Record<string, RegExp>; export declare function gobbleParens(text: string, offset: number): string; export declare function tokenizeBy(text: string, grammar?: Record<string, RegExp>): Token[]; export declare function tokenize(selector: string, grammar?: Record<string, RegExp>): Token[]; /** * Traverse an AST in depth-first order */ export declare function flatten(node: AST, /** * @internal */ parent?: AST): IterableIterator<[Token, AST | undefined]>; /** * Traverse an AST (or part thereof), in depth-first order */ export declare function walk(node: AST | undefined, visit: (node: AST, parentNode?: AST) => void, /** * @internal */ parent?: AST): void; export interface ParserOptions { recursive?: boolean; list?: boolean; } /** * Parse a CSS selector * * @param selector - The selector to parse * @param options.recursive - Whether to parse the arguments of pseudo-classes like :is(), :has() etc. Defaults to true. * @param options.list - Whether this can be a selector list (A, B, C etc). Defaults to true. */ export declare function parse(selector: string, { recursive, list }?: ParserOptions): AST | undefined; /** * Converts the given list or (sub)tree to a string. */ export declare function stringify(listOrNode: Token[] | AST): string; /** * To convert the specificity array to a number */ export declare function specificityToNumber(specificity: number[], base: number): number; /** * Calculate specificity of a selector. * * If the selector is a list, the max specificity is returned. */ export declare function specificity(selector: string | AST): number[]; export interface BaseToken { type: string; content: string; pos: [number, number]; } export interface CommaToken extends BaseToken { type: 'comma'; } export interface CombinatorToken extends BaseToken { type: 'combinator'; } export interface NamedToken extends BaseToken { name: string; } export interface IdToken extends NamedToken { type: 'id'; } export interface ClassToken extends NamedToken { type: 'class'; } export interface PseudoElementToken extends NamedToken { type: 'pseudo-element'; argument?: string; } export interface PseudoClassToken extends NamedToken { type: 'pseudo-class'; argument?: string; subtree?: AST; } export interface NamespacedToken extends BaseToken { namespace?: string; } export interface UniversalToken extends NamespacedToken { type: 'universal'; } export interface AttributeToken extends NamespacedToken, NamedToken { type: 'attribute'; operator?: string; value?: string; caseSensitive?: 'i' | 'I' | 's' | 'S'; } export interface TypeToken extends NamespacedToken, NamedToken { type: 'type'; } export interface UnknownToken extends BaseToken { type: never; } export type Token = AttributeToken | IdToken | ClassToken | CommaToken | CombinatorToken | PseudoElementToken | PseudoClassToken | UniversalToken | TypeToken | UnknownToken; export interface Complex { type: 'complex'; combinator: string; right: AST; left: AST; } export interface Relative { type: 'relative'; combinator: string; right: AST; } export interface Compound { type: 'compound'; list: Token[]; } export interface List { type: 'list'; list: AST[]; } export type AST = Complex | Relative | Compound | List | Token;