gersemi
Version:
148 lines • 11 kB
JavaScript
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiWE1MLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1hNTC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLQSxNQUFNLFlBQVksR0FBK0I7SUFDL0MsR0FBRyxFQUFFLGtDQUFrQztJQUN2QyxJQUFJLEVBQUUseUNBQXlDO0lBQy9DLEdBQUcsRUFBRSxzQ0FBc0M7SUFDM0MsR0FBRyxFQUFFLG9DQUFvQztJQUN6QyxJQUFJLEVBQUUsOEJBQThCO0lBQ3BDLEdBQUcsRUFBRSwrQkFBK0I7Q0FDckMsQ0FBQztBQUNGLE1BQU0sa0JBQWtCLEdBQVc7SUFDakMsR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQztRQUNoQyxFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztZQUMvQixNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDO0FBQ0QsTUFBTSxpQkFBaUIsSUFBWTtJQUNqQyxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLHFDQUFxQyxHQUFHLElBQUksQ0FBQztBQUM1RSxDQUFDO0FBQ0QsTUFBTSxpQkFBaUIsSUFBWSxFQUFFLEdBQVc7SUFDOUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMzQixDQUFDO0FBQ0QsTUFBTSxrQkFBa0IsSUFBZ0M7SUFDdEQsR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQztRQUV4QixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM1QixNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzNCLENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQztBQUVELE1BQU07SUFJSixZQUFtQixJ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