import { SandHTMLElement } from '@ephox/sand'; import type { HTMLElementFullTagNameMap } from '../../alien/DomTypes'; import * as NodeTypes from './NodeTypes'; import type { SugarElement } from './SugarElement'; const name = (element: SugarElement): string => { const r = element.dom.nodeName; return r.toLowerCase(); }; const type = (element: SugarElement): number => element.dom.nodeType; const value = (element: SugarElement): string | null => element.dom.nodeValue; const isType = (t: number) => (element: SugarElement): element is SugarElement => type(element) === t; const isComment = (element: SugarElement): element is SugarElement => type(element) === NodeTypes.COMMENT || name(element) === '#comment'; const isHTMLElement = (element: SugarElement): element is SugarElement => isElement(element) && SandHTMLElement.isPrototypeOf(element.dom); const isElement = isType(NodeTypes.ELEMENT); const isText = isType(NodeTypes.TEXT); const isDocument = isType(NodeTypes.DOCUMENT); const isDocumentFragment = isType(NodeTypes.DOCUMENT_FRAGMENT); const isTag = (tag: K) => (e: SugarElement): e is SugarElement => isElement(e) && name(e) === tag; export { name, type, value, isElement, isHTMLElement, isText, isDocument, isDocumentFragment, isComment, isTag };