static transform()

in src/utilities/transformers/bwdl-transformer.js [23:90]


  static transform(input: any) {
    if (!input.States) {
      return {
        edges: [],
        nodes: [],
      };
    }

    const nodeNames = Object.keys(input.States);

    const nodes: INode[] = [];
    const edges: IEdge[] = [];

    nodeNames.forEach(name => {
      const currentNode = input.States[name];

      if (!currentNode) {
        return;
      }

      const nodeToAdd: INode = {
        title: name,
        type: currentNode.Type,
        x: currentNode.x || 0,
        y: currentNode.y || 0,
      };

      if (name === input.StartAt) {
        nodes.unshift(nodeToAdd);
      } else {
        nodes.push(nodeToAdd);
      }

      // create edges
      if (currentNode.Type === 'Choice') {
        // multiple edges
        currentNode.Choices.forEach(choice => {
          if (input.States[choice.Next]) {
            edges.push({
              source: name,
              target: choice.Next,
            });
          }
        });

        // Choice nodes carry both a Choices list and an optional Default value which is not part of the list.
        if (currentNode.Default) {
          edges.push({
            source: name,
            target: currentNode.Default,
          });
        }
      } else if (currentNode.Next) {
        if (input.States[currentNode.Next]) {
          // single edge
          edges.push({
            source: name,
            target: currentNode.Next,
          });
        }
      }
    });

    return {
      edges,
      nodes,
    };
  }