@cute-dw/core
Version:
This TypeScript library is the main part of a more powerfull package designed for the fast WEB software development. The cornerstone of the library is the **DataStore** class, which might be useful when you need a full control of the data, but do not need
102 lines • 11.1 kB
JavaScript
export class XmlDocs {
/**
* Function that parses a string with specified mime type into an XML DOM, throwing an Error if XML parsing fails
*
* @param source String to be parsed
* @param mime Supported mime-type
* @returns XML Document object
*
* @private
* @static
*/
static _parse_xml(source, mime) {
const parser = new DOMParser();
const doc = parser.parseFromString(source, mime);
const errorNode = doc.querySelector("parseerror");
if (errorNode) {
const msg = errorNode.nodeValue;
throw new Error('Parsing error: ' + msg);
}
return doc;
}
/**
* Function that parses a XML-string into an XML DOM, throwing an Error if XML parsing fails
* @param source XML-string to be parsed
* @returns XML DOM object
* @static
*/
static parseXML(source) {
/*
// https://stackoverflow.com/questions/11563554/how-do-i-detect-xml-parsing-errors-when-using-javascripts-domparser-in-a-cross
// Parse a simple intentionally Invalid XML source to get namespace of <parsererror>:
const parser = new DOMParser();
const docError = parser.parseFromString('INVALID', 'application/xml');
const parsererrorNS = docError.getElementsByTagName("parsererror")[0].namespaceURI;
// Parse xmlString: (XMLDocument object)
const doc = parser.parseFromString(source, "application/xml");
const errNode = doc.getElementsByTagNameNS(parsererrorNS, 'parsererror');
if (errNode) {
const msg = errNode[0].nodeValue;
throw new Error('Parsing error: '+msg);
}
*/
return this._parse_xml(source, "application/xml");
}
/**
* Function that parses a SVG-string into an XML DOM, throwing an Error if XML parsing fails
*
* @param source SVG-string to be parsed
* @returns XML DOM object
* @static
*/
static parseSVG(source) {
return this._parse_xml(source, "image/svg+xml");
}
/**
* Transforms XML node object to plain JavaScript object
* @param node XML node object
* @returns Object
*/
static nodeToObject(node) {
let obj = {};
if (!node)
return null;
let props = node.childNodes;
if (props) {
for (let i = 0; i < props.length; i++) {
let propName = props[i].nodeName;
obj[propName] = props[i].nodeValue;
}
}
return obj;
}
/**
* Changes the special xml-characters (if any) to its escaped counterparts
* @param source The source string
* @returns New string
*/
static escapeChars(source) {
if (source == null)
return source;
return source.replace('&', "&")
.replace('"', """)
.replace("'", "'")
.replace('<', "<")
.replace('>', ">");
}
/**
* Changes the escaped special xml-characters (if any) to its normal view
* @param source The source string
* @returns New string
*/
static unescapeChars(source) {
if (source == null)
return source;
return source.replace("&", "&")
.replace(""", '"')
.replace("'", "'")
.replace("<", '<')
.replace(">", '>');
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiWG1sRG9jcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2N1dGUtY29yZS9zcmMvbGliL3V0aWwvWG1sRG9jcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8sT0FBTztJQUVsQjs7Ozs7Ozs7O09BU0c7SUFDSyxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQWMsRUFBRSxJQUE0QjtRQUNwRSxNQUFNLE1BQU0sR0FBRyxJQUFJLFNBQVMsRUFBRSxDQUFDO1FBQy9CLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2pELE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDbEQsSUFBSSxTQUFTLEVBQUU7WUFDYixNQUFNLEdBQUcsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDO1lBQ2hDLE1BQU0sSUFBSSxLQUFLLENBQUMsaUJBQWlCLEdBQUMsR0FBRyxDQUFDLENBQUM7U0FDeEM7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFDRDs7Ozs7T0FLRztJQUNILE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBYztRQUM1Qjs7Ozs7Ozs7Ozs7OztVQWFFO1FBRUYsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFDRDs7Ozs7O09BTUc7SUFDSCxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQWM7UUFDNUIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxlQUFlLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBQ0Q7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBZTtRQUNqQyxJQUFJLEdBQUcsR0FBUSxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLElBQUk7WUFBRSxPQUFPLElBQUksQ0FBQztRQUV2QixJQUFJLEtBQUssR0FBMEIsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUNuRCxJQUFJLEtBQUssRUFBRTtZQUNULEtBQUssSUFBSSxDQUFDLEdBQVEsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUMxQyxJQUFJLFFBQVEsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO2dCQUNqQyxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQzthQUNwQztTQUNGO1FBRUQsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBQ0Q7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBcUI7UUFDdEMsSUFBSSxNQUFNLElBQUksSUFBSTtZQUFHLE9BQU8sTUFBTSxDQUFDO1FBQ25DLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDO2FBQ3RCLE9BQU8sQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDO2FBQ3RCLE9BQU8sQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDO2FBQ3RCLE9BQU8sQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDO2FBQ3BCLE9BQU8sQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUNEOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsYUFBYSxDQUFDLE1BQXFCO1FBQ3hDLElBQUksTUFBTSxJQUFJLElBQUk7WUFBRyxPQUFPLE1BQU0sQ0FBQztRQUNuQyxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQzthQUNwQixPQUFPLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQzthQUN0QixPQUFPLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQzthQUN0QixPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQzthQUNwQixPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7Q0FFRiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjbGFzcyBYbWxEb2NzIHtcclxuXHJcbiAgLyoqXHJcbiAgICogRnVuY3Rpb24gdGhhdCBwYXJzZXMgYSBzdHJpbmcgd2l0aCBzcGVjaWZpZWQgbWltZSB0eXBlIGludG8gYW4gWE1MIERPTSwgdGhyb3dpbmcgYW4gRXJyb3IgaWYgWE1MIHBhcnNpbmcgZmFpbHNcclxuICAgKlxyXG4gICAqIEBwYXJhbSBzb3VyY2UgU3RyaW5nIHRvIGJlIHBhcnNlZFxyXG4gICAqIEBwYXJhbSBtaW1lICBTdXBwb3J0ZWQgbWltZS10eXBlXHJcbiAgICogQHJldHVybnMgWE1MIERvY3VtZW50IG9iamVjdFxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKiBAc3RhdGljXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzdGF0aWMgX3BhcnNlX3htbChzb3VyY2U6IHN0cmluZywgbWltZTogRE9NUGFyc2VyU3VwcG9ydGVkVHlwZSk6IFhNTERvY3VtZW50IHtcclxuICAgIGNvbnN0IHBhcnNlciA9IG5ldyBET01QYXJzZXIoKTtcclxuICAgIGNvbnN0IGRvYyA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmcoc291cmNlLCBtaW1lKTtcclxuICAgIGNvbnN0IGVycm9yTm9kZSA9IGRvYy5xdWVyeVNlbGVjdG9yKFwicGFyc2VlcnJvclwiKTtcclxuICAgIGlmIChlcnJvck5vZGUpIHtcclxuICAgICAgY29uc3QgbXNnID0gZXJyb3JOb2RlLm5vZGVWYWx1ZTtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXJzaW5nIGVycm9yOiAnK21zZyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZG9jO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBGdW5jdGlvbiB0aGF0IHBhcnNlcyBhIFhNTC1zdHJpbmcgaW50byBhbiBYTUwgRE9NLCB0aHJvd2luZyBhbiBFcnJvciBpZiBYTUwgcGFyc2luZyBmYWlsc1xyXG4gICAqIEBwYXJhbSBzb3VyY2UgWE1MLXN0cmluZyB0byBiZSBwYXJzZWRcclxuICAgKiBAcmV0dXJucyBYTUwgRE9NIG9iamVjdFxyXG4gICAqIEBzdGF0aWNcclxuICAgKi9cclxuICBzdGF0aWMgcGFyc2VYTUwoc291cmNlOiBzdHJpbmcpOiBYTUxEb2N1bWVudCB7XHJcbiAgICAvKlxyXG4gICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTE1NjM1NTQvaG93LWRvLWktZGV0ZWN0LXhtbC1wYXJzaW5nLWVycm9ycy13aGVuLXVzaW5nLWphdmFzY3JpcHRzLWRvbXBhcnNlci1pbi1hLWNyb3NzXHJcbiAgICAvLyBQYXJzZSBhIHNpbXBsZSBpbnRlbnRpb25hbGx5IEludmFsaWQgWE1MIHNvdXJjZSB0byBnZXQgbmFtZXNwYWNlIG9mIDxwYXJzZXJlcnJvcj46XHJcbiAgICBjb25zdCBwYXJzZXIgPSBuZXcgRE9NUGFyc2VyKCk7XHJcbiAgICBjb25zdCBkb2NFcnJvciA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmcoJ0lOVkFMSUQnLCAnYXBwbGljYXRpb24veG1sJyk7XHJcbiAgICBjb25zdCBwYXJzZXJlcnJvck5TID0gZG9jRXJyb3IuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJwYXJzZXJlcnJvclwiKVswXS5uYW1lc3BhY2VVUkk7XHJcbiAgICAvLyBQYXJzZSB4bWxTdHJpbmc6ICAoWE1MRG9jdW1lbnQgb2JqZWN0KVxyXG4gICAgY29uc3QgZG9jID0gcGFyc2VyLnBhcnNlRnJvbVN0cmluZyhzb3VyY2UsIFwiYXBwbGljYXRpb24veG1sXCIpO1xyXG4gICAgY29uc3QgZXJyTm9kZSA9IGRvYy5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKHBhcnNlcmVycm9yTlMsICdwYXJzZXJlcnJvcicpO1xyXG4gICAgaWYgKGVyck5vZGUpIHtcclxuICAgICAgY29uc3QgbXNnID0gZXJyTm9kZVswXS5ub2RlVmFsdWU7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGFyc2luZyBlcnJvcjogJyttc2cpO1xyXG4gICAgfVxyXG4gICAgKi9cclxuXHJcbiAgICByZXR1cm4gdGhpcy5fcGFyc2VfeG1sKHNvdXJjZSwgXCJhcHBsaWNhdGlvbi94bWxcIik7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEZ1bmN0aW9uIHRoYXQgcGFyc2VzIGEgU1ZHLXN0cmluZyBpbnRvIGFuIFhNTCBET00sIHRocm93aW5nIGFuIEVycm9yIGlmIFhNTCBwYXJzaW5nIGZhaWxzXHJcbiAgICpcclxuICAgKiBAcGFyYW0gc291cmNlIFNWRy1zdHJpbmcgdG8gYmUgcGFyc2VkXHJcbiAgICogQHJldHVybnMgWE1MIERPTSBvYmplY3RcclxuICAgKiBAc3RhdGljXHJcbiAgICovXHJcbiAgc3RhdGljIHBhcnNlU1ZHKHNvdXJjZTogc3RyaW5nKTogWE1MRG9jdW1lbnQge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BhcnNlX3htbChzb3VyY2UsIFwiaW1hZ2Uvc3ZnK3htbFwiKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogVHJhbnNmb3JtcyBYTUwgbm9kZSBvYmplY3QgdG8gcGxhaW4gSmF2YVNjcmlwdCBvYmplY3RcclxuICAgKiBAcGFyYW0gbm9kZSBYTUwgbm9kZSBvYmplY3RcclxuICAgKiBAcmV0dXJucyBPYmplY3RcclxuICAgKi9cclxuICBzdGF0aWMgbm9kZVRvT2JqZWN0KG5vZGU6IENoaWxkTm9kZSk6IE9iamVjdCB8IG51bGwge1xyXG4gICAgbGV0IG9iajogYW55ID0ge307XHJcbiAgICBpZiAoIW5vZGUpIHJldHVybiBudWxsO1xyXG5cclxuICAgIGxldCBwcm9wczogTm9kZUxpc3RPZjxDaGlsZE5vZGU+ID0gbm9kZS5jaGlsZE5vZGVzO1xyXG4gICAgaWYgKHByb3BzKSB7XHJcbiAgICAgIGZvciAobGV0IGk6bnVtYmVyPTA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGxldCBwcm9wTmFtZSA9IHByb3BzW2ldLm5vZGVOYW1lO1xyXG4gICAgICAgIG9ialtwcm9wTmFtZV0gPSBwcm9wc1tpXS5ub2RlVmFsdWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb2JqO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBDaGFuZ2VzIHRoZSBzcGVjaWFsIHhtbC1jaGFyYWN0ZXJzIChpZiBhbnkpIHRvIGl0cyBlc2NhcGVkIGNvdW50ZXJwYXJ0c1xyXG4gICAqIEBwYXJhbSBzb3VyY2UgVGhlIHNvdXJjZSBzdHJpbmdcclxuICAgKiBAcmV0dXJucyBOZXcgc3RyaW5nXHJcbiAgICovXHJcbiAgc3RhdGljIGVzY2FwZUNoYXJzKHNvdXJjZTogc3RyaW5nIHwgbnVsbCk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgaWYgKHNvdXJjZSA9PSBudWxsKSAgcmV0dXJuIHNvdXJjZTtcclxuICAgIHJldHVybiBzb3VyY2UucmVwbGFjZSgnJicsIFwiJmFtcDtcIilcclxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKCdcIicsIFwiJnF1b3Q7XCIpXHJcbiAgICAgICAgICAgICAgICAucmVwbGFjZShcIidcIiwgXCImYXBvcztcIilcclxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKCc8JywgXCImbHQ7XCIpXHJcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgnPicsIFwiJmd0O1wiKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogQ2hhbmdlcyB0aGUgZXNjYXBlZCBzcGVjaWFsIHhtbC1jaGFyYWN0ZXJzIChpZiBhbnkpIHRvIGl0cyBub3JtYWwgdmlld1xyXG4gICAqIEBwYXJhbSBzb3VyY2UgVGhlIHNvdXJjZSBzdHJpbmdcclxuICAgKiBAcmV0dXJucyBOZXcgc3RyaW5nXHJcbiAgICovXHJcbiAgc3RhdGljIHVuZXNjYXBlQ2hhcnMoc291cmNlOiBzdHJpbmcgfCBudWxsKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICBpZiAoc291cmNlID09IG51bGwpICByZXR1cm4gc291cmNlO1xyXG4gICAgcmV0dXJuIHNvdXJjZS5yZXBsYWNlKFwiJmFtcDtcIiwgXCImXCIpXHJcbiAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKFwiJnF1b3Q7XCIsICdcIicpXHJcbiAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKFwiJmFwb3M7XCIsIFwiJ1wiKVxyXG4gICAgICAgICAgICAgICAgICAucmVwbGFjZShcIiZsdDtcIiwgJzwnKVxyXG4gICAgICAgICAgICAgICAgICAucmVwbGFjZShcIiZndDtcIiwgJz4nKTtcclxuICB9XHJcblxyXG59XHJcbiJdfQ==