import type { Optional } from '@ephox/katamari'; import type { SugarElement } from '@ephox/sugar'; export interface GeneralDefinitionSpec { uid: string; tag?: string; attributes?: Record; classes?: string[]; styles?: Record; value?: any; innerHtml?: string; domChildren?: EC; // defChildren?: DC[]; } export interface DomDefinitionSpec extends GeneralDefinitionSpec> { } export interface GeneralDefinitionDetail { uid: string; tag: string; attributes: Record; classes: string[]; styles: Record; value: Optional; innerHtml: Optional; domChildren: EC[]; } export interface DomDefinitionDetail extends GeneralDefinitionDetail> { } const defToStr = (defn: GeneralDefinitionDetail): string => { const raw = defToRaw(defn); return JSON.stringify(raw, null, 2); }; const defToRaw = (defn: GeneralDefinitionDetail): GeneralDefinitionSpec => ({ uid: defn.uid, tag: defn.tag, classes: defn.classes, attributes: defn.attributes, styles: defn.styles, value: defn.value.getOr(''), innerHtml: defn.innerHtml.getOr(''), domChildren: defn.domChildren.length === 0 ? '0 children, but still specified' : String(defn.domChildren.length) }); export { defToStr, defToRaw };