import { BaseXmlComponent, IContext } from "./base"; import { IXmlableObject } from "./xmlable-object"; export type AttributeMap = { [P in keyof T]: string }; export abstract class XmlAttributeComponent extends BaseXmlComponent { // tslint:disable-next-line:readonly-keyword protected root: T; protected readonly xmlKeys?: AttributeMap; public constructor(properties: T) { super("_attr"); this.root = properties; } public prepForXml(_: IContext): IXmlableObject { const attrs = {}; Object.keys(this.root).forEach((key) => { const value = this.root[key]; if (value !== undefined) { const newKey = (this.xmlKeys && this.xmlKeys[key]) || key; attrs[newKey] = value; } }); return { _attr: attrs }; } }