@eagleoutice/flowr
Version:
Static Dataflow Analyzer and Program Slicer for the R Programming Language
56 lines • 1.76 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getCapabilityById = getCapabilityById;
exports.getAllCapabilities = getAllCapabilities;
const assert_1 = require("../../util/assert");
const data_1 = require("./data");
function search(id, capabilities, path = []) {
let idx = 0;
for (const capability of capabilities) {
idx++; // index by one :)
if (capability.id === id) {
return { ...capability, path: [...path, idx] };
}
if (capability.capabilities) {
const found = search(id, capability.capabilities, [...path, idx]);
if (found) {
return found;
}
}
}
return undefined;
}
const capabilityCache = new Map();
/**
* Find a flowR capability by its id.
*/
function getCapabilityById(id) {
const cached = capabilityCache.get(id);
if (cached) {
return cached;
}
const value = search(id, data_1.flowrCapabilities.capabilities);
(0, assert_1.guard)(value !== undefined, () => `Could not find capability with id ${id}`);
capabilityCache.set(id, value);
return value;
}
/**
* Get all capabilities with their paths.
*/
function getAllCapabilities() {
const result = [];
function traverse(capabilities, currentPath = []) {
let idx = 0;
for (const capability of capabilities) {
idx++;
const nextPath = [...currentPath, idx];
result.push({ ...capability, path: nextPath });
if (capability.capabilities) {
traverse(capability.capabilities, nextPath);
}
}
}
traverse(data_1.flowrCapabilities.capabilities, []);
return result;
}
//# sourceMappingURL=get.js.map