flowie
Version:
Library for creating, and working with flows
69 lines • 3.97 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const createFlowieContainer_1 = __importDefault(require("../container/createFlowieContainer"));
const compileFlowDeclaration_1 = __importDefault(require("../compiler/compileFlowDeclaration"));
const createFlowDeclarationManager_1 = __importDefault(require("../declaration/createFlowDeclarationManager"));
const flowieSignature_1 = require("./flowieSignature");
function createFlowieRuntime(flowieContainer, flowDeclarationManager) {
const executeCompiledFlow = compileFlowDeclaration_1.default(flowDeclarationManager, flowieContainer);
function executeFlow(argument) {
return executeCompiledFlow(argument);
}
function pipe(nextFlowItem) {
if (flowieSignature_1.isSignedAsFlowieFunction(nextFlowItem)) {
const flowie = nextFlowItem;
const nextFlowieContainer = flowieSignature_1.getFlowieContainer(flowie);
const nextFlowieDeclarationManager = flowieSignature_1.getFlowieDeclarationManager(flowie);
const mergedFlowieContainer = flowieContainer.merge(nextFlowieContainer);
const nextFlowDeclaration = flowDeclarationManager.pipe(nextFlowieDeclarationManager);
return createFlowieRuntime(mergedFlowieContainer, nextFlowDeclaration);
}
const nextFlowieContainer = flowieContainer.register(nextFlowItem);
const [uniqueFlowItem] = nextFlowieContainer.latestDetailsAdded;
const nextFlowDeclaration = flowDeclarationManager.pipe(uniqueFlowItem);
return createFlowieRuntime(nextFlowieContainer, nextFlowDeclaration);
}
function split(...nextFlowItemsList) {
const flowFunctionOrFlowieContainerList = nextFlowItemsList
.map(getFlowieContainerOrFunction);
const nextFlowieContainer = flowieContainer.merge(...[flowieContainer, ...flowFunctionOrFlowieContainerList]);
const flowDeclarationOrFunctionList = nextFlowItemsList
.map(getFlowieDeclarationOrFunction, { flowieContainer: nextFlowieContainer });
const nextFlowDeclaration = flowDeclarationManager.split(flowDeclarationOrFunctionList);
return createFlowieRuntime(nextFlowieContainer, nextFlowDeclaration);
}
const flowieExtender = { pipe, split };
// eslint-disable-next-line functional/immutable-data
return flowieSignature_1.signAsFlowieFunction(Object.assign(executeFlow, flowieExtender), flowieContainer, flowDeclarationManager);
}
exports.default = createFlowieRuntime;
function createFlowieFromItems(flowItemsList) {
const [firstFlowieItem] = flowItemsList;
if (flowItemsList.length === 1 && flowieSignature_1.isSignedAsFlowieFunction(firstFlowieItem)) {
return firstFlowieItem;
}
const flowFunctionOrFlowieContainerList = flowItemsList
.map(getFlowieContainerOrFunction);
const flowieContainer = createFlowieContainer_1.default().merge(...flowFunctionOrFlowieContainerList);
const flowDeclarationOrFunctionList = flowItemsList
.map(getFlowieDeclarationOrFunction, { flowieContainer });
const flowDeclaration = createFlowDeclarationManager_1.default(flowDeclarationOrFunctionList);
return createFlowieRuntime(flowieContainer, flowDeclaration);
}
exports.createFlowieFromItems = createFlowieFromItems;
function getFlowieContainerOrFunction(flowItem) {
if (flowieSignature_1.isSignedAsFlowieFunction(flowItem)) {
return flowieSignature_1.getFlowieContainer(flowItem);
}
return flowItem;
}
function getFlowieDeclarationOrFunction(flowItem) {
if (flowieSignature_1.isSignedAsFlowieFunction(flowItem)) {
return flowieSignature_1.getFlowieDeclarationManager(flowItem);
}
return this.flowieContainer.getFunctionDetails(flowItem);
}
//# sourceMappingURL=createFlowieRuntime.js.map