import * as Parser from "es-html-parser"; import { AnyCssNode, CssStyleSheet } from "./css-ast"; export interface Document extends Parser.DocumentNode { parent: null; children: Array; } export type Text = Parser.TextNode & { parent: Tag | Document | null; }; export interface Doctype extends Parser.DoctypeNode { parent: Document | Tag; open: DoctypeOpen; close: DoctypeClose; attributes: Array; } export interface DoctypeOpen extends Parser.DoctypeOpenNode { parent: Doctype; } export interface DoctypeClose extends Parser.DoctypeCloseNode { parent: Doctype; } export interface DoctypeAttribute extends Parser.DoctypeAttributeNode { parent: Doctype; startWrapper?: DoctypeAttributeWrapperStart; value?: DoctypeAttributeValue; endWrapper?: DoctypeAttributeWrapperEnd; } export interface DoctypeAttributeValue extends Parser.DoctypeAttributeValueNode { parent: DoctypeAttribute; } export interface DoctypeAttributeWrapperStart extends Parser.DoctypeAttributeWrapperStartNode { parent: DoctypeAttribute; } export interface DoctypeAttributeWrapperEnd extends Parser.DoctypeAttributeWrapperEndNode { parent: DoctypeAttribute; } export interface Comment extends Parser.CommentNode { parent: Tag | Document; open: CommentOpen; close: CommentClose; value: CommentContent; } export interface CommentOpen extends Parser.CommentOpenNode { parent: Comment; } export interface CommentClose extends Parser.CommentCloseNode { parent: Comment; } export interface CommentContent extends Parser.CommentContentNode { parent: Comment; } export interface Tag extends Parser.TagNode { parent: Document | Tag; openStart: OpenTagStart; openEnd: OpenTagEnd; attributes: Array; close?: CloseTag; children: Array; } export interface OpenTagStart extends Parser.OpenTagStartNode { parent: Tag; } export interface OpenTagEnd extends Parser.OpenTagEndNode { parent: Tag; } export interface CloseTag extends Parser.CloseTagNode { parent: Tag; } export interface ScriptTag extends Parser.ScriptTagNode { parent: Document | Tag; attributes: Array; openStart: OpenScriptTagStart; openEnd: OpenScriptTagEnd; value?: ScriptTagContent; } export interface OpenScriptTagStart extends Parser.OpenScriptTagStartNode { parent: ScriptTag; } export interface OpenScriptTagEnd extends Parser.OpenScriptTagEndNode { parent: ScriptTag; } export interface CloseScriptTag extends Parser.CloseScriptTagNode { parent: ScriptTag; } export interface ScriptTagContent extends Parser.ScriptTagContentNode { parent: ScriptTag; stylesheet?: AnyCssNode; } export interface StyleTag extends Parser.StyleTagNode { parent: Document | Tag; attributes: Array; openStart: OpenStyleTagStart; openEnd: OpenStyleTagEnd; value?: StyleTagContent; } export interface OpenStyleTagStart extends Parser.OpenStyleTagStartNode { parent: StyleTag; } export interface OpenStyleTagEnd extends Parser.OpenStyleTagEndNode { parent: StyleTag; } export interface CloseStyleTag extends Parser.CloseStyleTagNode { parent: StyleTag; } export interface StyleTagContent extends Parser.StyleTagContentNode { parent: StyleTag; stylesheet?: CssStyleSheet; } export interface Attribute extends Parser.AttributeNode { parent: Tag; key: AttributeKey; value?: AttributeValue; startWrapper?: AttributeValueWrapperStart; endWrapper?: AttributeValueWrapperEnd; } export interface AttributeKey extends Parser.AttributeKeyNode { parent: Attribute; } export interface AttributeValue extends Parser.AttributeValueNode { parent: Attribute; } export interface AttributeValueWrapperStart extends Parser.AttributeValueWrapperStartNode { parent: Attribute; } export interface AttributeValueWrapperEnd extends Parser.AttributeValueWrapperEndNode { parent: Attribute; } export type TemplateText = Text["parts"][number]; export type OpenTemplate = Parser.OpenTemplateNode; export type CloseTemplate = Parser.CloseTemplateNode; export type AnyHTMLNode = | Document | Doctype | DoctypeOpen | DoctypeClose | DoctypeAttribute | DoctypeAttributeValue | Comment | CommentOpen | CommentClose | CommentContent | Tag | OpenTagStart | OpenTagEnd | CloseTag | ScriptTag | OpenScriptTagStart | OpenScriptTagEnd | ScriptTagContent | CloseScriptTag | StyleTag | OpenStyleTagStart | OpenStyleTagEnd | StyleTagContent | CloseStyleTag | Attribute | AttributeKey | AttributeValue | AttributeValueWrapperEnd | AttributeValueWrapperStart | Text;