UNPKG

flowie

Version:

Library for creating, and working with flows

69 lines 3.97 kB
"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