UNPKG

@thednp/domparser

Version:

🍝 Super light HTML parser for isomorphic applications.

211 lines 6.62 kB
//#region src/parts/types.d.ts type TagNames = keyof HTMLElementTagNameMap | keyof SVGElementTagNameMap; type TagAttr<T extends TagNames> = (HTMLElementTagNameMap & SVGElementTagNameMap)[T]; /** * Represents a text node in the DOM */ type NodeLike = { tagName: string; nodeName: string; attributes: NodeLikeAttributes; children: ChildLike[]; nodeValue?: string; }; /** * Represents a text node in the DOM */ type TextNode = TextLike & { remove: () => void; nodeName: "#text"; get textContent(): string; set textContent(newValue: string); readonly ownerDocument: RootNode; readonly parentNode: RootNode | DOMNode; before: (...nodes: ChildNodeList) => void; after: (...nodes: ChildNodeList) => void; }; type TextLike = { nodeName: string; nodeValue: string; tagName?: string; children?: ChildLike[]; attributes?: Record<string, string>; }; /** * Represents a comment node in the DOM */ type CommentNode = CommentLike & { remove: () => void; nodeName: "#comment"; readonly textContent: string; readonly ownerDocument: RootNode; readonly parentNode: RootNode | DOMNode; before: (...nodes: ChildNodeList) => void; after: (...nodes: ChildNodeList) => void; }; type CommentLike = { nodeName: string; nodeValue: string; tagName?: string; children?: ChildLike[]; attributes?: Record<string, string>; }; type TextOrComment = TextNode | CommentNode; type ChildNode = DOMNode | TextNode | CommentNode; type ChildLike = NodeLike | TextLike | CommentLike; type ChildNodeList = ChildNode[]; type ChildElementList = DOMNode[]; /** * Node API */ type NodeAPI = { nodeName: string; readonly ownerDocument: RootNode; readonly parentElement: DOMNode | null; readonly parentNode: RootNode | DOMNode; get textContent(): string; set textContent(newValue: string); childNodes: ChildNode[]; nodeValue?: string; before: (...nodes: ChildNodeList) => void; after: (...nodes: ChildNodeList) => void; }; /** * Node API */ type ElementAPI = { readonly tagName: string & TagNames; readonly attributes: Map<string, string>; readonly textContent: string; readonly innerHTML: string; readonly id: string; readonly className: string; readonly outerHTML: string; append: (...nodes: ChildNodeList) => void; appendChild: (node: ChildNode) => void; querySelector: (selector: string) => DOMNode | null; querySelectorAll: (selector: string) => DOMNode[]; getElementsByTagName: (tagName: string) => DOMNode[]; getElementsByClassName: (className: string) => DOMNode[]; closest: (selector: string) => DOMNode | null; contains: (node: DOMNode) => boolean; matches: (selector: string) => boolean; hasAttribute: (attrName: string) => boolean; getAttribute: (attrName: string) => string | null; setAttribute: (attrName: string, attrValue: string) => void; removeAttribute: (attrName: string) => void; hasAttributeNS: (ns: string, attrName: string) => boolean; getAttributeNS: (ns: string, attrName: string) => string | null; setAttributeNS: (ns: string, attrName: string, attrValue: string) => void; removeAttributeNS: (ns: string, attrName: string) => void; replaceChildren: (...children: DOMNode[]) => void; removeChild: (child: ChildNode) => void; registerChild: (child: DOMNode) => void; remove: () => void; cleanup: () => void; children: DOMNode[]; }; /** * Represents an element node in the DOM */ type DOMNode = NodeAPI & ElementAPI; type MaybeChildNode = ChildNode | string | number; /** * Represents the root document node */ type RootNode = Omit<NodeAPI, "nodeName" | "ownerDocument"> & Omit<ElementAPI, "attributes" | "tagName" | "registerChild"> & { nodeName: "#document"; charset?: string; doctype?: string; readonly all: DOMNode[]; readonly documentElement: DOMNode | undefined; readonly head: DOMNode | undefined; readonly body: DOMNode | undefined; register: (node: DOMNode) => void; deregister: (node: DOMNode) => void; getElementById: (id: string) => DOMNode | null; createElement: (tagName: string & TagNames, first?: MaybeChildNode | NodeLikeAttributes, ...childNodes: MaybeChildNode[]) => DOMNode; createElementNS: (namespace: string, tagName: string & keyof SVGElementTagNameMap, first?: MaybeChildNode | NodeLikeAttributes, ...childNodes: MaybeChildNode[]) => DOMNode; createComment: (value: string) => CommentNode; createTextNode: (value: string) => TextNode; }; /** * Represents a lighter root document node */ type RootLike = { nodeName: "#document"; children: ChildLike[]; }; /** * HTML parsing token */ type HTMLToken = { tokenType: "tag" | "text" | "comment" | "doctype"; value: string; isSC?: boolean; }; interface TokenizerOptions { /** Maximum size in bytes for script content. Default 102400 (100KB) */ maxScriptSize?: number; /** Chunk size in bytes. Default 65536 (64KB) */ chunkSize?: number; } type TextToken = { tokenType: "text" | "comment"; value: string; }; /** * Parser configuration options */ type DomParserOptions = { onNodeCallback: (node: DOMNode, parent: RootNode | DOMNode, root: RootNode) => ChildNode; filterTags: string[]; filterAttrs: string[]; }; /** * Parser result containing the simplidied DOM tree * and component/tag information */ type ParseResult = { root: RootLike; components: string[]; tags: string[]; }; /** * Parser result containing the DOM tree * and component/tag information */ type DomParserResult = { root: RootNode; components: string[]; tags: string[]; }; /** * Represents a part of a CSS selector */ type SelectorPart = { type: "#" | "." | "[" | ""; name: string; value?: string; }; /** * Represents NodeLike attributes */ type NodeLikeAttributes = Record<string, string>; /** * Represents DOMNode attributes */ type DOMNodeAttributes = Map<string, string>; /** * Options for the attributes parser. */ type GetAttributesOptions = { unsafeAttrs: Set<string>; }; /** * Selector match function */ type MatchFunction = (node: DOMNode) => boolean; //#endregion export { TagAttr as C, TextOrComment as D, TextNode as E, TextToken as O, SelectorPart as S, TextLike as T, NodeLike as _, CommentLike as a, RootLike as b, DOMNodeAttributes as c, ElementAPI as d, GetAttributesOptions as f, NodeAPI as g, MaybeChildNode as h, ChildNodeList as i, TokenizerOptions as k, DomParserOptions as l, MatchFunction as m, ChildLike as n, CommentNode as o, HTMLToken as p, ChildNode as r, DOMNode as s, ChildElementList as t, DomParserResult as u, NodeLikeAttributes as v, TagNames as w, RootNode as x, ParseResult as y }; //# sourceMappingURL=types-CaW3j-V_.d.cts.map