appcenter-cli
Version:
Command line tool for Visual Studio App Center
85 lines (84 loc) • 2.83 kB
JavaScript
;
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;