buildActionMap()

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;
  }