flowie
Version:
Library for creating, and working with flows
58 lines • 2.61 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const createFlowDeclarationManager_1 = __importDefault(require("./createFlowDeclarationManager"));
function buildFlowDeclaration(flowDeclaration, flowieContainer) {
const [firstFlow, ...restOfFlow] = flowDeclaration.flows;
const flowFunctionDetails = convertFlowElementToDeclarable(firstFlow, flowieContainer);
const flowDeclarationManager = createFlowDeclarationManager_1.default(flowFunctionDetails);
return restOfFlow.reduce(parseFlows, { flowDeclarationManager, flowieContainer }).flowDeclarationManager;
}
exports.default = buildFlowDeclaration;
function parseFlows({ flowDeclarationManager, flowieContainer }, flowElement) {
const flowFunctionDetailsList = convertFlowElementToDeclarable(flowElement, flowieContainer);
if (flowElement.split) {
return {
flowieContainer,
flowDeclarationManager: flowDeclarationManager.split(flowFunctionDetailsList)
};
}
const [flowFunctionDetails] = flowFunctionDetailsList;
return {
flowieContainer,
flowDeclarationManager: flowDeclarationManager.pipe(flowFunctionDetails) // TODO
};
}
// TODO subflows
function convertFlowElementToDeclarable(flowElement, flowieContainer) {
const pipeFlow = flowElement;
if (pipeFlow.pipe) {
if (typeof pipeFlow.pipe === 'string') {
return [converToFlowFunctionDetails(pipeFlow.pipe, flowieContainer)];
}
return [
buildFlowDeclaration({ flows: [pipeFlow.pipe], name: pipeFlow.name }, flowieContainer)
];
}
const splitFlow = flowElement;
if (splitFlow.split) {
const splitFlow = flowElement;
return splitFlow.split.map(converSplitToFlowFunctionDetails, { flowieContainer });
}
return [buildFlowDeclaration(flowElement, flowieContainer)];
}
function converSplitToFlowFunctionDetails(flowieItemDeclaration) {
if (typeof flowieItemDeclaration === 'string') {
return converToFlowFunctionDetails(flowieItemDeclaration, this.flowieContainer);
}
return buildFlowDeclaration({ flows: [flowieItemDeclaration], name: flowieItemDeclaration.name }, this.flowieContainer);
}
function converToFlowFunctionDetails(functionName, flowieContainer) {
return {
name: functionName,
isAsync: flowieContainer.functionsContainer[functionName].isAsync
};
}
//# sourceMappingURL=buildFlowDeclaration.js.map