UNPKG

gersemi

Version:
148 lines 11 kB
const namespaceMap = { xsd: 'http://www.w3.org/2001/XMLSchema', soap: 'http://www.w3.org/2003/05/soap-envelope', wsa: 'http://www.w3.org/2005/08/addressing', gen: 'http://ns.esha.com/2013/genesisapi', exlx: 'http://ns.esha.com/2013/exlx', typ: 'http://ns.esha.com/2013/types', }; export function getAbbr(uri) { for (const abbr in namespaceMap) { if (namespaceMap[abbr] === uri) { return abbr; } } } export function getURI(abbr) { return namespaceMap[abbr] || 'http://ns.esha.com/2013/genesisapi/' + abbr; } export function setURI(abbr, uri) { namespaceMap[abbr] = uri; } export function setURIs(uris) { for (const abbr in uris) { if (!(abbr in namespaceMap)) { setURI(abbr, uris[abbr]); } } } export class Node { constructor(name) { this.name = name; const colon = name.indexOf(':'); if (colon < 0) { this.namespace = ''; this.type = name; } else { this.namespace = name.substring(0, colon); this.type = name.substring(colon + 1); } } } export function fromJSON(json, root = new Element('root'), ns = '') { for (const name in json) { if (name !== '_attributes' && name !== '_value') { const el = new Element(name.indexOf(':') < 0 ? ns + name : name); root.add(el); let value = json[name]; const isObject = value && typeof value === 'object'; const attrs = isObject && value && value['_attributes']; if (value instanceof Array) { for (const val of value) { fromJSON(val, el, ns); } } else if (isObject && !value['_value']) { fromJSON(value, el, ns); } else { if (attrs) { value = value['_value']; } el.add(typeof value !== 'string' ? JSON.stringify(value) : value); } if (attrs) { for (const attrName in attrs) { el.attr(attrName, attrs[attrName]); } } } } return root.name === 'root' && root.children.length === 1 ? root.children[0] : root; } export class Element extends Node { constructor(name, attrs = {}) { super(name); this.name = name; this.children = []; this.attributes = []; for (const key in attrs) { this.attr(key, attrs[key]); } } attr(name, value) { this.attributes.push(new Attribute(name, value)); return this; } ns(name, uri) { return this.attr('xmlns:' + name, uri); } add(...children) { for (const child of children) { this.children.push(child); } return this; } render(tab) { const name = this.name; let newline = '\n'; const pretty = tab !== 0; if (!pretty) { tab = ''; newline = ''; } let xml = tab + '<' + name; for (const attr of this.attributes) { xml += ' ' + attr.toString(); } xml += '>'; let tabbed = pretty && this.children.length > 1; for (const child of this.children) { if (pretty && child instanceof Element) { tabbed = true; xml += newline + child.render(tab + ' '); } else if (tabbed) { xml += newline + tab + ' ' + child.toString(); } else { xml += child.toString(); } } if (tabbed) { xml += newline + tab; } xml += '</' + name + '>'; return xml; } toString() { return this.render(0); } toNiceString() { return this.render(''); } } export class Attribute extends Node { constructor(name, value) { super(name); this.name = name; this.value = value; } toString() { return this.name + '="' + this.value + '"'; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiWE1MLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1hNTC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLQSxNQUFNLFlBQVksR0FBK0I7SUFDL0MsR0FBRyxFQUFFLGtDQUFrQztJQUN2QyxJQUFJLEVBQUUseUNBQXlDO0lBQy9DLEdBQUcsRUFBRSxzQ0FBc0M7SUFDM0MsR0FBRyxFQUFFLG9DQUFvQztJQUN6QyxJQUFJLEVBQUUsOEJBQThCO0lBQ3BDLEdBQUcsRUFBRSwrQkFBK0I7Q0FDckMsQ0FBQztBQUNGLE1BQU0sa0JBQWtCLEdBQVc7SUFDakMsR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQztRQUNoQyxFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztZQUMvQixNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDO0FBQ0QsTUFBTSxpQkFBaUIsSUFBWTtJQUNqQyxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLHFDQUFxQyxHQUFHLElBQUksQ0FBQztBQUM1RSxDQUFDO0FBQ0QsTUFBTSxpQkFBaUIsSUFBWSxFQUFFLEdBQVc7SUFDOUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMzQixDQUFDO0FBQ0QsTUFBTSxrQkFBa0IsSUFBZ0M7SUFDdEQsR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQztRQUV4QixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM1QixNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzNCLENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQztBQUVELE1BQU07SUFJSixZQUFtQixJQUFZO1FBQVosU0FBSSxHQUFKLElBQUksQ0FBUTtRQUM3QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hDLEVBQUUsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2QsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDbkIsQ0FBQztRQUFDLElBQUksQ0FBQyxDQUFDO1lBQ04sSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUMxQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3hDLENBQUM7SUFDSCxDQUFDO0NBR0Y7QUFTRCxNQUFNLG1CQUNKLElBQW9CLEVBQ3BCLElBQUksR0FBRyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFDMUIsRUFBRSxHQUFHLEVBQUU7SUFFUCxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3hCLEVBQUUsQ0FBQyxDQUFDLElBQUksS0FBSyxhQUFhLElBQUksSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDaEQsTUFBTSxFQUFFLEdBQUcsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDYixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdkIsTUFBTSxRQUFRLEdBQUcsS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQztZQUNwRCxNQUFNLEtBQUssR0FBRyxRQUFRLElBQUksS0FBSyxJQUFLLEtBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNqRSxFQUFFLENBQUMsQ0FBQyxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDM0IsR0FBRyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQztvQkFDeEIsUUFBUSxDQUFDLEdBQXFCLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUMxQyxDQUFDO1lBQ0gsQ0FBQztZQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLElBQUksQ0FBRSxLQUFhLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNqRCxRQUFRLENBQUMsS0FBdUIsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDNUMsQ0FBQztZQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNOLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7b0JBQ1YsS0FBSyxHQUFJLEtBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDbkMsQ0FBQztnQkFDRCxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDcEUsQ0FBQztZQUNELEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ1YsR0FBRyxDQUFDLENBQUMsTUFBTSxRQUFRLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQztvQkFDN0IsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JDLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFDRCxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxNQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQztRQUN2RCxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQVk7UUFDN0IsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUNYLENBQUM7QUFFRCxNQUFNLGNBQWUsU0FBUSxJQUFJO0lBSS9CLFlBQW1CLElBQVksRUFBRSxRQUFzQixFQUFFO1FBQ3ZELEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQURLLFNBQUksR0FBSixJQUFJLENBQVE7UUFIeEIsYUFBUSxHQUE2QixFQUFFLENBQUM7UUFDeEMsZUFBVSxHQUFnQixFQUFFLENBQUM7UUFJbEMsR0FBRyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQztZQUV4QixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUM3QixDQUFDO0lBQ0gsQ0FBQztJQUVNLElBQUksQ0FBQyxJQUFZLEVBQUUsS0FBYztRQUN0QyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLFNBQVMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNqRCxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVNLEVBQUUsQ0FBQyxJQUFZLEVBQUUsR0FBVztRQUNqQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFTSxHQUFHLENBQUMsR0FBRyxRQUFrQztRQUM5QyxHQUFHLENBQUMsQ0FBQyxNQUFNLEtBQUssSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQzdCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVCLENBQUM7UUFDRCxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVNLE1BQU0sQ0FBQyxHQUFlO1FBQzNCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDdkIsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE1BQU0sTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUM7UUFDekIsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ1osR0FBRyxHQUFHLEVBQUUsQ0FBQztZQUNULE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDZixDQUFDO1FBRUQsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUM7UUFDM0IsR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7WUFDbkMsR0FBRyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDL0IsQ0FBQztRQUNELEdBQUcsSUFBSSxHQUFHLENBQUM7UUFFWCxJQUFJLE1BQU0sR0FBRyxNQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ2hELEdBQUcsQ0FBQyxDQUFDLE1BQU0sS0FBSyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ2xDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sSUFBSSxLQUFLLFlBQVksT0FBTyxDQUFDLENBQUMsQ0FBQztnQkFDdkMsTUFBTSxHQUFHLElBQUksQ0FBQztnQkFDZCxHQUFHLElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDO1lBQzVDLENBQUM7WUFBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFDbEIsR0FBRyxJQUFJLE9BQU8sR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNqRCxDQUFDO1lBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ04sR0FBRyxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUMxQixDQUFDO1FBQ0gsQ0FBQztRQUVELEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDWCxHQUFHLElBQUksT0FBTyxHQUFHLEdBQUcsQ0FBQztRQUN2QixDQUFDO1FBQ0QsR0FBRyxJQUFJLElBQUksR0FBRyxJQUFJLEdBQUcsR0FBRyxDQUFDO1FBQ3pCLE1BQU0sQ0FBQyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRU0sUUFBUTtRQUNiLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFTSxZQUFZO1FBQ2pCLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7Q0FDRjtBQUVELE1BQU0sZ0JBQWlCLFNBQVEsSUFBSTtJQUNqQyxZQUFtQixJQUFZLEVBQVMsS0FBYztRQUNwRCxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFESyxTQUFJLEdBQUosSUFBSSxDQUFRO1FBQVMsVUFBSyxHQUFMLEtBQUssQ0FBUztJQUV0RCxDQUFDO0lBRU0sUUFBUTtRQUNiLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztJQUM3QyxDQUFDO0NBQ0YifQ==