UNPKG

@rudderstack/workflow-engine

Version:
149 lines 6.17 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.WorkflowUtils = void 0; const lodash_1 = require("lodash"); const path_1 = __importDefault(require("path")); const yaml_1 = __importDefault(require("yaml")); const common_1 = require("../bindings/common"); const common_2 = require("../common"); const errors_1 = require("../errors"); const default_executor_1 = require("./default_executor"); const output_validator_1 = require("./output_validator"); class WorkflowUtils { static populateWorkflowName(workflow, workflowPath) { if (!workflow.name) { const { name } = path_1.default.parse(workflowPath); // eslint-disable-next-line no-param-reassign workflow.name = name; } } static async createWorkflowFromFilePath(yamlPath) { const workflow = (await this.createFromFilePath(yamlPath)) ?? {}; this.populateWorkflowName(workflow, yamlPath); return workflow; } static async createFromFilePath(yamlPath) { const yamlString = await common_2.CommonUtils.readFile(yamlPath); return this.createFromYaml(yamlString); } static createFromYaml(yamlString) { return yaml_1.default.parse(yamlString); } static validateWorkflow(workflow) { if (!workflow?.steps?.length) { throw new errors_1.WorkflowCreationError('Workflow should contain at least one step', workflow.name); } } static validate(workflow) { const validator = new output_validator_1.WorkflowOutputsValidator(workflow); validator.validateOutputs(); } static async getModuleExports(modulePath) { var _a; let moduleExports; try { moduleExports = await (_a = modulePath, Promise.resolve().then(() => __importStar(require(_a)))); } catch (error) { if (error.code !== 'MODULE_NOT_FOUND') { throw error; } } return moduleExports; } static async getModuleExportsFromProvider(modulePath, provider) { let moduleExports; try { moduleExports = await provider.provide(modulePath); } catch (error) { // Ignore error } return moduleExports; } static async getModuleExportsFromBindingsPath(bindingPath) { return ((await this.getModuleExports(bindingPath)) ?? (await this.getModuleExports(path_1.default.join(process.cwd(), bindingPath)))); } static async getModuleExportsFromAllPaths(bindingPath, options) { const binding = (await this.getModuleExports(path_1.default.join(options.rootPath, bindingPath))) ?? (options.bindingProvider ? await this.getModuleExportsFromProvider(bindingPath, options.bindingProvider) : await this.getModuleExportsFromBindingsPath(bindingPath)); if (!binding) { throw new errors_1.BindingNotFoundError(bindingPath); } return binding; } static async extractWorkflowOptionsBindings(options) { if (!options.bindingsPaths?.length) { return {}; } const bindings = await Promise.all(options.bindingsPaths.map(async (bindingPath) => this.getModuleExportsFromAllPaths(bindingPath, options))); return Object.assign({}, ...bindings); } static async extractBinding(binding, options) { const parentBindings = options.parentBindings ?? {}; const { name, value, path: bidningPath, fromParent, exportAll } = binding; if (fromParent) { return { [name]: parentBindings[name] }; } if (value) { return { [name]: value }; } const bindingSource = await this.getModuleExportsFromAllPaths(bidningPath ?? 'bindings', options); if (!name) { return bindingSource; } const names = (0, common_1.toArray)(name); if (names.length === 1) { return { [name]: exportAll ? bindingSource : bindingSource[name] }; } return (0, lodash_1.pick)(bindingSource, names); } static async extractBindings(options, bindings = []) { if (bindings.length === 0) { return {}; } const bindingsData = await Promise.all(bindings.map(async (binding) => this.extractBinding(binding, options))); return Object.assign({}, ...bindingsData); } static async getExecutor(workflow, options) { if (workflow?.executor) { const executor = options.currentBindings[workflow.executor]; if (typeof executor?.execute !== 'function') { throw new errors_1.WorkflowCreationError('Workflow executor not found', workflow.executor); } return executor; } return options.executor ?? default_executor_1.DefaultWorkflowExecutor.INSTANCE; } } exports.WorkflowUtils = WorkflowUtils; //# sourceMappingURL=utils.js.map