import { WorkflowElement } from '../../../../classes';
import { LinkStrategy } from '../../../../interfaces';
import { CustomBpmnModdle, ModdleElement, BpmnStatementNode, ConditionOperatorPair } from '../../../../types';
import { UtilsService } from '../../../utils.service';
import * as i0 from "@angular/core";
export declare class GatewayLinkStrategy implements LinkStrategy<ModdleElement> {
    private readonly moddle;
    private readonly utils;
    private readonly conditions;
    constructor(moddle: CustomBpmnModdle, utils: UtilsService, conditions: Array<ConditionOperatorPair>);
    /**
     * It creates a link between two nodes
     * @param element - The element that is being processed.
     * @param {BpmnStatementNode} node - BpmnStatementNode
     * @returns An array of ModdleElements
     */
    execute(element: WorkflowElement<ModdleElement>, node: BpmnStatementNode): ModdleElement[];
    /**
     * It creates a link between two nodes
     * @param {BpmnStatementNode} node - BpmnStatementNode
     * @returns An array of links.
     */
    private createLink;
    /**
     * It creates a link between two nodes
     * @param {BpmnStatementNode} node - The current node
     * @param {BpmnStatementNode[]} nextNodes - The next node of the current node
     * @returns An array of links.
     */
    private createMainLink;
    /**
     * It creates a link between the current node and the next node
     * @param {BpmnStatementNode} node - The current node
     * @param {BpmnStatementNode[]} elseNextNodes - The next node of the else branch
     * @returns A link between the current node and the next node.
     */
    private createElseLink;
    /**
     * It creates a link between the current node and the end node
     * @param {BpmnStatementNode} node - BpmnStatementNode
     * @returns An array of two elements.
     */
    private createEndLink;
    /**
     * It creates a link between two nodes
     * @param {string} id - The id of the link
     * @param {ModdleElement} from - ModdleElement - the source element
     * @param {ModdleElement} to - ModdleElement - the element that the link is going to
     * @returns An object with the id, sourceRef, and targetRef properties.
     */
    private createLinkAttrs;
    /**
     * It creates a script that loops through the rows of the table and adds the taskIds of the rows that
     * match the condition to an array
     * @param {BpmnStatementNode} node - The node that we're creating the script for.
     * @param {string} flowId - The id of the flow that is being created.
     * @param {boolean} [isElse] - boolean - This is a flag that tells the script whether it's an if or
     * an else statement.
     * @returns An object with a script and a name.
     */
    private createScript;
    /**
     * It creates a loop script that loops through the data and pushes the ids of the tasks that match
     * the condition to an array
     * @param {BpmnStatementNode} node - BpmnStatementNode - this is the node that is being processed
     * @param {string} condition - The condition that is being checked.
     * @param [isElse=false] - This is a boolean value that determines whether the script is for the if
     * or else statement.
     * @returns A string of javascript code.
     */
    private createLoopScript;
    /**
     * > Get the last node in the graph that has outputs
     * @param {BpmnStatementNode} node - The node to start from
     * @returns The last node with an output.
     */
    private getLastNodeWithOutput;
    /**
     * It returns a string that represents the condition of the node
     * @param {BpmnStatementNode} node - BpmnStatementNode - the node that is being processed
     * @returns The condition is being returned.
     */
    private getCondition;
    static ɵfac: i0.ɵɵFactoryDeclaration<GatewayLinkStrategy, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<GatewayLinkStrategy>;
}
