@eagleoutice/flowr
Version:
Static Dataflow Analyzer and Program Slicer for the R Programming Language
58 lines • 3.43 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.DependenciesQueryDefinition = exports.Unknown = void 0;
const ansi_1 = require("../../../util/ansi");
const time_1 = require("../../../util/time");
const joi_1 = __importDefault(require("joi"));
const dependencies_query_executor_1 = require("./dependencies-query-executor");
exports.Unknown = 'unknown';
function printResultSection(title, infos, result, sectionSpecifics) {
if (infos.length <= 0) {
return;
}
result.push(` ╰ ${title}`);
const grouped = infos.reduce(function (groups, i) {
const array = groups.get(i.functionName);
if (array) {
array.push(i);
}
else {
groups.set(i.functionName, [i]);
}
return groups;
}, new Map());
for (const [functionName, infos] of grouped) {
result.push(` ╰ \`${functionName}\``);
result.push(infos.map(i => ` ╰ Node Id: ${i.nodeId}, ${sectionSpecifics(i)}`).join('\n'));
}
}
const functionInfoSchema = joi_1.default.array().items(joi_1.default.object({
name: joi_1.default.string().required().description('The name of the library function.'),
package: joi_1.default.string().optional().description('The package name of the library function'),
argIdx: joi_1.default.number().optional().description('The index of the argument that contains the library name.'),
argName: joi_1.default.string().optional().description('The name of the argument that contains the library name.'),
})).optional();
exports.DependenciesQueryDefinition = {
executor: dependencies_query_executor_1.executeDependenciesQuery,
asciiSummarizer: (formatter, _processed, queryResults, result) => {
const out = queryResults;
result.push(`Query: ${(0, ansi_1.bold)('dependencies', formatter)} (${(0, time_1.printAsMs)(out['.meta'].timing, 0)})`);
printResultSection('Libraries', out.libraries, result, l => `\`${l.libraryName}\``);
printResultSection('Sourced Files', out.sourcedFiles, result, s => `\`${s.file}\``);
printResultSection('Read Data', out.readData, result, r => `\`${r.source}\``);
printResultSection('Written Data', out.writtenData, result, w => `\`${w.destination}\``);
return true;
},
schema: joi_1.default.object({
type: joi_1.default.string().valid('dependencies').required().description('The type of the query.'),
ignoreDefaultFunctions: joi_1.default.boolean().optional().description('Should the set of functions that are detected by default be ignored/skipped?'),
libraryFunctions: functionInfoSchema.description('The set of library functions to search for.'),
sourceFunctions: functionInfoSchema.description('The set of source functions to search for.'),
readFunctions: functionInfoSchema.description('The set of data reading functions to search for.'),
writeFunctions: functionInfoSchema.description('The set of data writing functions to search for.'),
}).description('The dependencies query retrieves and returns the set of all dependencies in the dataflow graph, which includes libraries, sourced files, read data, and written data.')
};
//# sourceMappingURL=dependencies-query-format.js.map