xrefcli
Version:
CLI command for the searching through OpenEdge XREF
149 lines • 5.69 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
result["default"] = mod;
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
const help_1 = require("../help");
const readline = __importStar(require("readline"));
class MatrixCommand {
constructor(config) {
this.inputFromSources = true;
this.inputFromTables = false;
this.excludes = [];
this.config = config;
this.xreffiles = this.config.loadRepo(this.config.data.current);
}
execute(params) {
const promise = new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {
let inputArray = yield this.readStdin();
inputArray = this.extractExcludes(inputArray);
if (this.inputFromSources) {
this.iterateSources(inputArray);
}
resolve();
}));
return promise;
}
extractExcludes(inputArray) {
const result = [];
inputArray.forEach(line => {
if (line.startsWith('-') /*|| line.startsWith('+')*/) {
this.excludes.push(line.substring(1));
}
else {
result.push(line);
}
});
return result;
}
iterateSources(sourcesArray) {
const matrix = {};
const allTables = [];
// sort sources first
sourcesArray = sourcesArray.sort((a, b) => a.toLowerCase() < b.toLowerCase() ? -1 : 1);
for (const source of sourcesArray) {
const tablesOfSource = {};
const xreffile = this.xreffiles.filter(item => item.sourcefile === source)[0];
let sourcename = '';
if (xreffile !== undefined) {
for (const table of xreffile.tables) {
const crdString = (table.isCreated ? 'C' : ' ') +
'R' +
(table.isUpdated ? 'U' : ' ') +
(table.isDeleted ? 'D' : ' ');
tablesOfSource[table.database + '.' + table.name] = crdString;
allTables.push(table.database + '.' + table.name);
}
sourcename = source;
}
else {
sourcename = source + ' <NOT FOUND>';
}
matrix[sourcename] = tablesOfSource;
}
let tablenames = [...new Set(allTables)];
if (this.excludes.length > 0) {
tablenames = tablenames.filter(table => {
let includeSource = true;
this.excludes.forEach(exclude => {
if (table.startsWith(exclude)) {
includeSource = false;
}
});
return includeSource;
});
}
tablenames.sort((a, b) => a.toLowerCase() < b.toLowerCase() ? -1 : 1);
this.outputMatrix(matrix, tablenames);
}
outputMatrix(matrix, tablenames) {
// output table names first
let line = '';
tablenames.forEach(tablename => {
line += ';' + tablename;
});
console.log(line);
const sourcenames = Object.keys(matrix);
sourcenames.forEach(source => {
line = source;
tablenames.forEach(tablename => {
const crud = matrix[source][tablename];
line += ';' + ((crud !== undefined) ? crud : '');
});
console.log(line);
});
}
readStdin() {
return __awaiter(this, void 0, void 0, function* () {
const inputArray = [];
const promise = new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {
const rl = readline.createInterface({
input: process.stdin
});
rl.on('line', (input) => {
if (input !== '') {
inputArray.push(input);
}
else {
rl.close();
resolve(inputArray);
}
});
}));
return promise;
});
}
validate(params) {
const options = params['options'];
if (options['help'] === true) {
const help = new help_1.Help();
help.matrixCommand();
process.exit(0);
}
if (options['tables'] === true && options['sources'] === true) {
console.error('--tables and --sources options cannot be combined');
return false;
}
if (options['sources'] === true) {
this.inputFromSources = true;
}
if (options['tables'] === true) {
this.inputFromTables = true;
}
return true;
}
}
exports.MatrixCommand = MatrixCommand;
//# sourceMappingURL=matrix.js.map