UNPKG

@eagleoutice/flowr

Version:

Static Dataflow Analyzer and Program Slicer for the R Programming Language

58 lines 3.43 kB
"use strict"; 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