appcenter-cli
Version:
Command line tool for Visual Studio App Center
87 lines (86 loc) • 2.95 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const fs = require("fs");
const path = require("path");
const unzipper = require("unzipper");
const xmldom_1 = require("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.Parse())
.on("entry", function (entry) {
// Skip directories and hidden system files
if (entry.type === "Directory" || path.basename(entry.path).substring(0, 1) === ".") {
entry.autodrain();
return;
}
const fullPath = path.join(tempPath, entry.path);
entry.pipe(fs.createWriteStream(fullPath)).on("finish", () => {
try {
processXml(fullPath, entry.path);
}
catch (e) {
reject(e);
}
});
})
.promise()
.then(() => resolvePromise(resolve), (e) => console.log("error", e));
});
}
}
// Handle DOMParser warnings, errors and fatalErrors like JS exceptions
XmlUtil.DOMParserConfig = {
locator: {},
errorHandler: function (level, msg) {
throw `DOMParser${level}: ${msg}`;
}
};
exports.XmlUtil = XmlUtil;
function validXmlFile(file) {
try {
const xml = new xmldom_1.DOMParser(XmlUtil.DOMParserConfig).parseFromString(fs.readFileSync(file, "utf-8"), "text/xml");
return xml != null;
}
catch (_a) {
return false;
}
}
exports.validXmlFile = validXmlFile;