csproj-integrity
Version:
Check csproj file (Visual Studio) integrity
81 lines (69 loc) • 2.27 kB
JavaScript
;
// vendors modules
const globby = require("globby");
const fs = require("fs");
const xml2js = require("xml2js");
const path = require("path");
// libs modules
const beautifyPath = require("./beautifyPath");
/**
* Parse csproj file
*
* @returns {promise}
*/
module.exports = function() {
let cwd = process.cwd();
let csproj = globby.sync(["*.csproj"]).map(e => {
return beautifyPath(cwd + "/" + e);
});
if (csproj && csproj.length > 0) {
var parser = new xml2js.Parser();
var fileIncluded = [];
return new Promise((resolve, reject) => {
fs.readFile(csproj[0], (err, data) => {
parser.parseString(data, (err, result) => {
let itemgroups = result.Project.ItemGroup;
if (!itemgroups || itemgroups.length === 0) {
reject("No item groups found in csprojFile");
}
fileIncluded = itemgroups
//Take only item groups <Compile>, <Content> and <TypeScriptCompile>
.filter(
item =>
item.Compile ||
item.Content ||
item.TypeScriptCompile ||
false
)
//Take only the object of itemgroup
.map(item => {
let a = [];
if (item.Content) {
a = a.concat(item.Content);
}
if (item.Compile) {
a = a.concat(item.Compile);
}
if (item.TypeScriptCompile) {
a = a.concat(item.TypeScriptCompile);
}
return a;
})
.reduce((fileIncludes, itemsArray) => {
fileIncludes = itemsArray
.map(item => {
let include = item.$.Include;
include = include.replace(/\\/g, path.sep); //normalize on *nix
return unescape(include);
})
.concat(fileIncludes);
return fileIncludes;
}, []);
resolve(fileIncluded);
});
});
});
} else {
return Promise.reject("ERR: csproj file not found");
}
}