in src/parser/WDL/entities/Context.js [142:184]
buildActionMap(ast, imports = this.imports) {
const actionMap = {};
if (!ast) {
return actionMap;
}
const definitions = ast.attributes.body;
const tasks = definitions.list.filter(item => item.name.toLowerCase() === Constants.TASK)
.map(wfNode => new Task(wfNode.attributes));
const workflows = definitions.list.filter(item => item.name.toLowerCase() === Constants.WORKFLOW)
.map((wfNode) => {
const workflow = new Workflow(wfNode.attributes.name.source_string, { ast: _.cloneDeep(wfNode) });
workflow.i = Context.getInputsWorkflow(_.cloneDeep(wfNode.attributes.body));
workflow.o = Context.getOutputsWorkflow(_.cloneDeep(wfNode.attributes.body));
return workflow;
});
tasks.forEach((task) => {
const command = imports.genericTaskCommandMap.get(task.name);
actionMap[task.name] = task.constructAction(command);
});
workflows.forEach((workflow) => {
actionMap[workflow.name] = workflow;
});
const importsArray = extractImportsArray(ast);
if (importsArray.length) {
importsArray.forEach((imp) => {
const childImport = Context.findChildImport(imp.name, imports);
if (childImport) {
const childActionMap = this.buildActionMap(childImport.ast, childImport);
_.forEach(childActionMap, (action, name) => {
const actionName = `${imp.name}.${name}`;
action.name = actionName;
actionMap[actionName] = action;
});
}
});
}
return actionMap;
}