UNPKG

@eagleoutice/flowr

Version:

Static Dataflow Analyzer and Program Slicer for the R Programming Language

50 lines 1.66 kB
"use strict"; 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(); 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; } 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