|
|
- export = CSSselect;
-
- /**
- * Alias for CSSselect.selectAll(query, elems, options).
- * @see [CSSselect.compile] for supported selector queries.
- */
- declare function CSSselect<Node, ElementNode extends Node>(
- query: CSSselect.Query,
- elems: Array<ElementNode> | ElementNode,
- options?: CSSselect.Options<Node, ElementNode>
- ): Array<ElementNode>;
-
- declare namespace CSSselect {
- type Predicate<Value> = (v: Value) => boolean;
- interface Adapter<Node, ElementNode extends Node> {
- /**
- * is the node a tag?
- */
- isTag(node: Node): node is ElementNode;
-
- /**
- * Does at least one of passed element nodes pass the test predicate?
- */
- existsOne(test: Predicate<ElementNode>, elems: Array<ElementNode>): boolean;
-
- /**
- * get the attribute value.
- */
- getAttributeValue(elem: ElementNode, name: string): string;
-
- /**
- * get the node's children
- */
- getChildren(node: Node): Array<Node>;
-
- /**
- * get the name of the tag
- */
- getName(elem: ElementNode): string;
-
- /**
- * get the parent of the node
- */
- getParent(node: Node): Node;
-
- /*
- Get the siblings of the node. Note that unlike jQuery's `siblings` method,
- this is expected to include the current node as well
- */
- getSiblings(node: Node): Array<Node>;
-
- /*
- * Get the text content of the node, and its children if it has any.
- */
- getText(node: Node): string;
-
- /**
- * Does the element have the named attribute?
- */
- hasAttrib(elem: ElementNode, name: string): boolean;
-
- /**
- * takes an array of nodes, and removes any duplicates, as well as any
- * nodes whose ancestors are also in the array.
- */
- removeSubsets(nodes: Array<Node>): Array<Node>;
-
- /**
- * finds all of the element nodes in the array that match the test predicate,
- * as well as any of their children that match it.
- */
- findAll(test: Predicate<ElementNode>, nodes: Array<Node>): Array<ElementNode>;
-
- /**
- * finds the first node in the array that matches the test predicate, or one
- * of its children.
- */
- findOne(test: Predicate<ElementNode>, elems: Array<ElementNode>): ElementNode | undefined,
-
- /**
- The adapter can also optionally include an equals method, if your DOM
- structure needs a custom equality test to compare two objects which refer
- to the same underlying node. If not provided, `css-select` will fall back to
- `a === b`.
- */
- equals?: (a: Node, b: Node) => boolean;
-
- /**
- * is the element in hovered state?
- */
- isHovered?: (elem: ElementNode) => boolean;
-
- /**
- * is the element in visited state?
- */
- isVisited?: (elem: ElementNode) => boolean;
-
- /**
- * is the element in active state?
- */
- isActive?: (elem: ElementNode) => boolean;
- }
-
- // TODO default types to the domutil/httpparser2 types
- interface Options<Node, ElementNode extends Node> {
- /**
- * When enabled, tag names will be case-sensitive. Default: false.
- */
- xmlMode?: boolean;
- /**
- * Limits the module to only use CSS3 selectors. Default: false.
- */
- strict?: boolean;
- /**
- * The last function in the stack, will be called with the last element
- * that's looked at. Should return true.
- */
- rootFunc?: (element: ElementNode) => true;
- /**
- * The adapter to use when interacting with the backing DOM structure. By
- * default it uses domutils.
- */
- adapter?: Adapter<Node, ElementNode>;
- }
-
- type CompiledQuery = (node: any) => boolean;
- type Query = string | CompiledQuery;
-
- /**
- * Compiles the query, returns a function.
- *
- * Supported simple selectors:
- * * Universal (*)
- * * Tag (<tagname>)
- * * Attribute ([attr=foo]), with supported comparisons:
- * * [attr] (existential)
- * * =
- * * ~=
- * * |=
- * * *=
- * * ^=
- * * $=
- * * !=
- * * Can be case insensitive (E.g. [attr=foo i])
- * * Pseudos:
- * * :not
- * * :root
- * * :empty
- * * :[first|last]-child[-of-type]
- * * :only-of-type, :only-child
- * * :nth-[last-]child[-of-type]
- * * :link, :visited (the latter doesn't match any elements)
- * * :checked
- * * :enabled, :disabled
- * * :required, :optional
- * * Nonstandard Pseudos (available when strict mode is not enabled):
- * * `:contains`
- * * `:icontains` (case-insensitive version of :contains)
- * * `:has`
- * * `:parent`
- * * `:selected`
- * * `:header, :button, :input, :text, :checkbox, :file, :password, :reset, :radio etc.
- * * :matches
- *
- * Supported Combinators:
- *
- * * Descendant (` `)
- * * Child (`>`)
- * * Parent (`<`) (when strict mode is not enabled)
- * * Sibling (`~`)
- * * Adjacent (`+`)
- */
- function compile(query: string): CompiledQuery;
- /**
- * @template Node The generic Node type for the DOM adapter being used.
- * @template ElementNode The Node type for elements for the DOM adapter being used.
- * @param elems Elements to query. If it is an element, its children will be queried..
- * @param query can be either a CSS selector string or a compiled query function.
- * @param [options] options for querying the document.
- * @see CSSselect.compile for supported selector queries.
- * @returns All matching elements.
- */
- function selectAll<Node, ElementNode extends Node>(
- query: Query,
- elems: Array<ElementNode> | ElementNode,
- options?: Options<Node, ElementNode>
- ): Array<ElementNode>;
- /**
- * @template Node The generic Node type for the DOM adapter being used.
- * @template ElementNode The Node type for elements for the DOM adapter being used.
- * @param elems Elements to query. If it is an element, its children will be queried..
- * @param query can be either a CSS selector string or a compiled query function.
- * @param [options] options for querying the document.
- * @see CSSselect.compile for supported selector queries.
- * @returns the first match, or null if there was no match.
- */
- function selectOne<Node, ElementNode extends Node>(
- query: Query,
- elems: Array<ElementNode> | ElementNode,
- options?: Options<Node, ElementNode>
- ): ElementNode | null;
-
- /**
- * Tests whether or not an element is matched by query.
- *
- * @template Node The generic Node type for the DOM adapter being used.
- * @template ElementNode The Node type for elements for the DOM adapter being used.
- * @param elem The element to test if it matches the query.
- * @param query can be either a CSS selector string or a compiled query function.
- * @param [options] options for querying the document.
- * @see CSSselect.compile for supported selector queries.
- * @returns
- */
- function is<Node, ElementNode extends Node>(
- elem: ElementNode,
- query: Query,
- options?: Options<Node, ElementNode>
- ): boolean;
- }
|