import { BaseXmlComponent } from "./base"; import { IXmlableObject } from "./xmlable-object"; export { BaseXmlComponent }; export abstract class XmlComponent extends BaseXmlComponent { protected root: Array; constructor(rootKey: string) { super(rootKey); this.root = new Array(); } public prepForXml(): IXmlableObject { const children = this.root .filter(c => { if (c instanceof BaseXmlComponent) { return !c.isDeleted; } return true; }) .map((comp) => { if (comp instanceof BaseXmlComponent) { return comp.prepForXml(); } return comp; }) .filter((comp) => comp); // Exclude null, undefined, and empty strings return { [this.rootKey]: children, }; } public addChildElement(child: XmlComponent | string) { this.root.push(child); } public delete() { this.deleted = true; } }