UNPKG

@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
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('&', "&amp;") .replace('"', "&quot;") .replace("'", "&apos;") .replace('<', "&lt;") .replace('>', "&gt;"); } /** * 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("&amp;", "&") .replace("&quot;", '"') .replace("&apos;", "'") .replace("&lt;", '<') .replace("&gt;", '>'); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiWG1sRG9jcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2N1dGUtY29yZS9zcmMvbGliL3V0aWwvWG1sRG9jcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8sT0FBTztJQUVsQjs7Ozs7Ozs7O09BU0c7SUFDSyxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQWMsRUFBRSxJQUE0QjtRQUNwRSxNQUFNLE1BQU0sR0FBRyxJQUFJLFNBQVMsRUFBRSxDQUFDO1FBQy9CLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2pELE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDbEQsSUFBSSxTQUFTLEVBQUU7WUFDYixNQUFNLEdBQUcsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDO1lBQ2hDLE1BQU0sSUFBSSxLQUFLLENBQUMsaUJBQWlCLEdBQUMsR0FBRyxDQUFDLENBQUM7U0FDeEM7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFDRDs7Ozs7T0FLRztJQUNILE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBYztRQUM1Qjs7Ozs7Ozs7Ozs7OztVQWFFO1FBRUYsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFDRDs7Ozs7O09BTUc7SUFDSCxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQWM7UUFDNUIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxlQUFlLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBQ0Q7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBZTtRQUNqQyxJQUFJLEdBQUcsR0FBUSxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLElBQUk7WUFBRSxPQUFPLElBQUksQ0FBQztRQUV2QixJQUFJLEtBQUssR0FBMEIsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUNuRCxJQUFJLEtBQUssRUFBRTtZQUNULEtBQUssSUFBSSxDQUFDLEdBQVEsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUMxQyxJQUFJLFFBQVEsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO2dCQUNqQyxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQzthQUNwQztTQUNGO1FBRUQsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBQ0Q7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBcUI7UUFDdEMsSUFBSSxNQUFNLElBQUksSUFBSTtZQUFHLE9BQU8sTUFBTSxDQUFDO1FBQ25DLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDO2FBQ3RCLE9BQU8sQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDO2FBQ3RCLE9BQU8sQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDO2FBQ3RCLE9BQU8sQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDO2FBQ3BCLE9BQU8sQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUNEOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsYUFBYSxDQUFDLE1BQXFCO1FBQ3hDLElBQUksTUFBTSxJQUFJLElBQUk7WUFBRyxPQUFPLE1BQU0sQ0FBQztRQUNuQyxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQzthQUNwQixPQUFPLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQzthQUN0QixPQUFPLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQzthQUN0QixPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQzthQUNwQixPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7Q0FFRiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjbGFzcyBYbWxEb2NzIHtcclxuXHJcbiAgLyoqXHJcbiAgICogRnVuY3Rpb24gdGhhdCBwYXJzZXMgYSBzdHJpbmcgd2l0aCBzcGVjaWZpZWQgbWltZSB0eXBlIGludG8gYW4gWE1MIERPTSwgdGhyb3dpbmcgYW4gRXJyb3IgaWYgWE1MIHBhcnNpbmcgZmFpbHNcclxuICAgKlxyXG4gICAqIEBwYXJhbSBzb3VyY2UgU3RyaW5nIHRvIGJlIHBhcnNlZFxyXG4gICAqIEBwYXJhbSBtaW1lICBTdXBwb3J0ZWQgbWltZS10eXBlXHJcbiAgICogQHJldHVybnMgWE1MIERvY3VtZW50IG9iamVjdFxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKiBAc3RhdGljXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzdGF0aWMgX3BhcnNlX3htbChzb3VyY2U6IHN0cmluZywgbWltZTogRE9NUGFyc2VyU3VwcG9ydGVkVHlwZSk6IFhNTERvY3VtZW50IHtcclxuICAgIGNvbnN0IHBhcnNlciA9IG5ldyBET01QYXJzZXIoKTtcclxuICAgIGNvbnN0IGRvYyA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmcoc291cmNlLCBtaW1lKTtcclxuICAgIGNvbnN0IGVycm9yTm9kZSA9IGRvYy5xdWVyeVNlbGVjdG9yKFwicGFyc2VlcnJvclwiKTtcclxuICAgIGlmIChlcnJvck5vZGUpIHtcclxuICAgICAgY29uc3QgbXNnID0gZXJyb3JOb2RlLm5vZGVWYWx1ZTtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXJzaW5nIGVycm9yOiAnK21zZyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZG9jO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBGdW5jdGlvbiB0aGF0IHBhcnNlcyBhIFhNTC1zdHJpbmcgaW50byBhbiBYTUwgRE9NLCB0aHJvd2luZyBhbiBFcnJvciBpZiBYTUwgcGFyc2luZyBmYWlsc1xyXG4gICAqIEBwYXJhbSBzb3VyY2UgWE1MLXN0cmluZyB0byBiZSBwYXJzZWRcclxuICAgKiBAcmV0dXJucyBYTUwgRE9NIG9iamVjdFxyXG4gICAqIEBzdGF0aWNcclxuICAgKi9cclxuICBzdGF0aWMgcGFyc2VYTUwoc291cmNlOiBzdHJpbmcpOiBYTUxEb2N1bWVudCB7XHJcbiAgICAvKlxyXG4gICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTE1NjM1NTQvaG93LWRvLWktZGV0ZWN0LXhtbC1wYXJzaW5nLWVycm9ycy13aGVuLXVzaW5nLWphdmFzY3JpcHRzLWRvbXBhcnNlci1pbi1hLWNyb3NzXHJcbiAgICAvLyBQYXJzZSBhIHNpbXBsZSBpbnRlbnRpb25hbGx5IEludmFsaWQgWE1MIHNvdXJjZSB0byBnZXQgbmFtZXNwYWNlIG9mIDxwYXJzZXJlcnJvcj46XHJcbiAgICBjb25zdCBwYXJzZXIgPSBuZXcgRE9NUGFyc2VyKCk7XHJcbiAgICBjb25zdCBkb2NFcnJvciA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmcoJ0lOVkFMSUQnLCAnYXBwbGljYXRpb24veG1sJyk7XHJcbiAgICBjb25zdCBwYXJzZXJlcnJvck5TID0gZG9jRXJyb3IuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJwYXJzZXJlcnJvclwiKVswXS5uYW1lc3BhY2VVUkk7XHJcbiAgICAvLyBQYXJzZSB4bWxTdHJpbmc6ICAoWE1MRG9jdW1lbnQgb2JqZWN0KVxyXG4gICAgY29uc3QgZG9jID0gcGFyc2VyLnBhcnNlRnJvbVN0cmluZyhzb3VyY2UsIFwiYXBwbGljYXRpb24veG1sXCIpO1xyXG4gICAgY29uc3QgZXJyTm9kZSA9IGRvYy5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKHBhcnNlcmVycm9yTlMsICdwYXJzZXJlcnJvcicpO1xyXG4gICAgaWYgKGVyck5vZGUpIHtcclxuICAgICAgY29uc3QgbXNnID0gZXJyTm9kZVswXS5ub2RlVmFsdWU7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGFyc2luZyBlcnJvcjogJyttc2cpO1xyXG4gICAgfVxyXG4gICAgKi9cclxuXHJcbiAgICByZXR1cm4gdGhpcy5fcGFyc2VfeG1sKHNvdXJjZSwgXCJhcHBsaWNhdGlvbi94bWxcIik7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEZ1bmN0aW9uIHRoYXQgcGFyc2VzIGEgU1ZHLXN0cmluZyBpbnRvIGFuIFhNTCBET00sIHRocm93aW5nIGFuIEVycm9yIGlmIFhNTCBwYXJzaW5nIGZhaWxzXHJcbiAgICpcclxuICAgKiBAcGFyYW0gc291cmNlIFNWRy1zdHJpbmcgdG8gYmUgcGFyc2VkXHJcbiAgICogQHJldHVybnMgWE1MIERPTSBvYmplY3RcclxuICAgKiBAc3RhdGljXHJcbiAgICovXHJcbiAgc3RhdGljIHBhcnNlU1ZHKHNvdXJjZTogc3RyaW5nKTogWE1MRG9jdW1lbnQge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BhcnNlX3htbChzb3VyY2UsIFwiaW1hZ2Uvc3ZnK3htbFwiKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogVHJhbnNmb3JtcyBYTUwgbm9kZSBvYmplY3QgdG8gcGxhaW4gSmF2YVNjcmlwdCBvYmplY3RcclxuICAgKiBAcGFyYW0gbm9kZSBYTUwgbm9kZSBvYmplY3RcclxuICAgKiBAcmV0dXJucyBPYmplY3RcclxuICAgKi9cclxuICBzdGF0aWMgbm9kZVRvT2JqZWN0KG5vZGU6IENoaWxkTm9kZSk6IE9iamVjdCB8IG51bGwge1xyXG4gICAgbGV0IG9iajogYW55ID0ge307XHJcbiAgICBpZiAoIW5vZGUpIHJldHVybiBudWxsO1xyXG5cclxuICAgIGxldCBwcm9wczogTm9kZUxpc3RPZjxDaGlsZE5vZGU+ID0gbm9kZS5jaGlsZE5vZGVzO1xyXG4gICAgaWYgKHByb3BzKSB7XHJcbiAgICAgIGZvciAobGV0IGk6bnVtYmVyPTA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGxldCBwcm9wTmFtZSA9IHByb3BzW2ldLm5vZGVOYW1lO1xyXG4gICAgICAgIG9ialtwcm9wTmFtZV0gPSBwcm9wc1tpXS5ub2RlVmFsdWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb2JqO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBDaGFuZ2VzIHRoZSBzcGVjaWFsIHhtbC1jaGFyYWN0ZXJzIChpZiBhbnkpIHRvIGl0cyBlc2NhcGVkIGNvdW50ZXJwYXJ0c1xyXG4gICAqIEBwYXJhbSBzb3VyY2UgVGhlIHNvdXJjZSBzdHJpbmdcclxuICAgKiBAcmV0dXJucyBOZXcgc3RyaW5nXHJcbiAgICovXHJcbiAgc3RhdGljIGVzY2FwZUNoYXJzKHNvdXJjZTogc3RyaW5nIHwgbnVsbCk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgaWYgKHNvdXJjZSA9PSBudWxsKSAgcmV0dXJuIHNvdXJjZTtcclxuICAgIHJldHVybiBzb3VyY2UucmVwbGFjZSgnJicsIFwiJmFtcDtcIilcclxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKCdcIicsIFwiJnF1b3Q7XCIpXHJcbiAgICAgICAgICAgICAgICAucmVwbGFjZShcIidcIiwgXCImYXBvcztcIilcclxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKCc8JywgXCImbHQ7XCIpXHJcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgnPicsIFwiJmd0O1wiKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogQ2hhbmdlcyB0aGUgZXNjYXBlZCBzcGVjaWFsIHhtbC1jaGFyYWN0ZXJzIChpZiBhbnkpIHRvIGl0cyBub3JtYWwgdmlld1xyXG4gICAqIEBwYXJhbSBzb3VyY2UgVGhlIHNvdXJjZSBzdHJpbmdcclxuICAgKiBAcmV0dXJucyBOZXcgc3RyaW5nXHJcbiAgICovXHJcbiAgc3RhdGljIHVuZXNjYXBlQ2hhcnMoc291cmNlOiBzdHJpbmcgfCBudWxsKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICBpZiAoc291cmNlID09IG51bGwpICByZXR1cm4gc291cmNlO1xyXG4gICAgcmV0dXJuIHNvdXJjZS5yZXBsYWNlKFwiJmFtcDtcIiwgXCImXCIpXHJcbiAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKFwiJnF1b3Q7XCIsICdcIicpXHJcbiAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKFwiJmFwb3M7XCIsIFwiJ1wiKVxyXG4gICAgICAgICAgICAgICAgICAucmVwbGFjZShcIiZsdDtcIiwgJzwnKVxyXG4gICAgICAgICAgICAgICAgICAucmVwbGFjZShcIiZndDtcIiwgJz4nKTtcclxuICB9XHJcblxyXG59XHJcbiJdfQ==