UNPKG

appcenter-cli

Version:

Command line tool for Visual Studio App Center

85 lines (84 loc) 2.83 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.validXmlFile = exports.XmlUtil = void 0; const fs = require("fs"); const path = require("path"); const unzipper = require("unzipper"); const xmldom_1 = require("@xmldom/xmldom"); class XmlUtil { collectAllElements(element, name) { let result = []; if (!element || !name) { return result; } if (element.nodeName === name) { result.push(element); } for (let i = 0; element.childNodes && i < element.childNodes.length; ++i) { result = result.concat(this.collectAllElements(element.childNodes[i], name)); } return result; } collectChildren(element, name) { if (!element || !name) { return []; } if (element.nodeName === name) { return [element]; } let result = []; for (let i = 0; element.childNodes && i < element.childNodes.length; ++i) { result = result.concat(this.collectChildren(element.childNodes[i], name)); } return result; } countChildren(element) { if (!element || !element.childNodes) { return 0; } let result = element.childNodes.length; for (let i = 0; i < element.childNodes.length; ++i) { result += this.countChildren(element.childNodes[i]); } return result; } getMergeXmlResultsPromise(pathToArchive, tempPath, processXml, resolvePromise) { return new Promise((resolve, reject) => { fs.createReadStream(pathToArchive) .pipe(unzipper.Extract({ path: tempPath })) .on("close", () => { try { const files = fs.readdirSync(tempPath); files .filter((fileName) => { return fileName.endsWith(".xml"); }) .forEach((file) => processXml(path.join(tempPath, file), file)); resolvePromise(resolve); } catch (e) { console.log("error", `XML parsing failed: ${e}`); reject(e); } }); }); } } exports.XmlUtil = XmlUtil; // Handle DOMParser warnings, errors and fatalErrors like JS exceptions XmlUtil.DOMParserConfig = { locator: {}, errorHandler: function (level, msg) { throw `DOMParser${level}: ${msg}`; }, }; function validXmlFile(file) { try { const xml = new xmldom_1.DOMParser(XmlUtil.DOMParserConfig).parseFromString(fs.readFileSync(file, "utf-8"), "text/xml"); return xml != null; } catch (e) { return false; } } exports.validXmlFile = validXmlFile;