UNPKG

@haystacks/async

Version:

A framework to build any number or any kind of native application or automation solution.

95 lines (89 loc) 5.32 kB
/** * @file chiefWorkflow.js * @module chiefWorkflow * @description Holds all of the functions that manage the workflows, * system defined workflows, client defined workflows, * setting the workflow data and getting the workflow data. * @requires module:chiefData * @requires module:configurator * @requires module:loggers * @requires module:data * @requires {@link https://www.npmjs.com/package/@haystacks/constants|@haystacks/constants} * @requires {@link https://www.npmjs.com/package/path|path} * @author Seth Hollingsead * @date 2022/02/04 * @copyright Copyright © 2022-… by Seth Hollingsead. All rights reserved */ // Internal imports import chiefData from './chiefData.js'; import configurator from '../executrix/configurator.js'; import loggers from '../executrix/loggers.js'; import D from '../structures/data.js'; // External imports import hayConst from '@haystacks/constants'; import path from 'path'; const {bas, cfg, msg, sys, wrd} = hayConst; const baseFileName = path.basename(import.meta.url, path.extname(import.meta.url)); // framework.controllers.chiefWorkflow. const namespacePrefix = wrd.cframework + bas.cDot + wrd.ccontrollers + bas.cDot + baseFileName + bas.cDot; /** * @function loadCommandWorkflowsFromPath * @description Loads the command workflows XML file that is specified by the input. * @param {string} commandWorkflowFilePathConfigurationName The path and file name to the XML that contains the command workflows definitions. * (Could be system defined command workflows or client command defined command workflows) * @param {string} contextName The context name defines what parent workflow namespace the loaded and merged data should be stored in. * Example: * contextName = "framework" => D['CommandWorkflows']['Framework'] * contextName = "application" => D['CommandWorkflows']['Application'] * contextName = "plugin" => D['CommandWorkflows']['Plugins']['<pluginName>'] * @return {boolean|object} True or False if the data to be loaded is not from a plugin, returns a JSON object is the data to be loaded is from a plugin. * @author Seth Hollingsead * @date 2022/02/04 */ async function loadCommandWorkflowsFromPath(commandWorkflowFilePathConfigurationName, contextName) { let functionName = loadCommandWorkflowsFromPath.name; await loggers.consoleLog(namespacePrefix + functionName, msg.cBEGIN_Function); // commandWorkflowFilePathConfigurationName is: await loggers.consoleLog(namespacePrefix + functionName, msg.ccommandWorkflowFilePathConfigurationNameIs + commandWorkflowFilePathConfigurationName); // contextName await loggers.consoleLog(namespacePrefix + functionName, msg.ccontextNameIs + contextName); let returnData = false; let allCommandWorkflowsData = {}; if (!contextName.toUpperCase().includes(wrd.cPLUGIN)) { allCommandWorkflowsData = await chiefData.setupAllXmlData(commandWorkflowFilePathConfigurationName, sys.cCommandWorkflows); } else if (contextName.toUpperCase().includes(wrd.cPLUGIN)) { allCommandWorkflowsData = await chiefData.setupAllXmlPluginData(commandWorkflowFilePathConfigurationName, sys.cPluginWorkflows); } // allCommandWorkflowsData is: await loggers.consoleLog(namespacePrefix + functionName, msg.callCommandWorkflowsDataIs + JSON.stringify(allCommandWorkflowsData)); if (D[sys.cCommandWorkflows] === undefined) { // Make sure we only do this if it's undefined, otherwise we might wipe out previously loaded data. D[sys.cCommandWorkflows] = {}; D[sys.cCommandWorkflows][sys.cFramework] = allCommandWorkflowsData; returnData = true; } else if (contextName.toUpperCase() === wrd.cAPPLICATION) { // for (let i = 0; i < allCommandWorkflowsData[sys.cCommandWorkflows][wrd.cWorkflows].length; i++) { // D[sys.cCommandWorkflows][wrd.cWorkflows].push(allCommandWorkflowsData[sys.cCommandWorkflows][wrd.cWorkflows][i]); // Object.assign(D[sys.cCommandWorkflows][wrd.cWorkflows], allCommandWorkflowsData[sys.cCommandWorkflows][wrd.cWorkflows]); // D[sys.cCommandWorkflows] = ruleBroker.processRules([D[sys.cCommandWorkflows], allCommandWorkflowsData], [biz.cobjectDeepMerge]); D[sys.cCommandWorkflows][wrd.cApplication] = allCommandWorkflowsData; returnData = true; // } } else if (contextName.toUpperCase().includes(wrd.cPLUGIN)) { let pluginName = await configurator.getConfigurationSetting(wrd.csystem, sys.cPluginName); // NOTE: If there is a pluginName in the configuration setting, then we have a special condition that is running here. // This is the case that the build-Release app is running to roll a release of a plugin, and plugin validation data is being loaded for validation. if (pluginName) { D[sys.cCommandWorkflows][wrd.cPlugins] = {}; D[sys.cCommandWorkflows][wrd.cPlugins][pluginName] = {}; D[sys.cCommandWorkflows][wrd.cPlugins][pluginName] = allCommandWorkflowsData; } returnData = allCommandWorkflowsData; } // console.log('All loaded workflow data is: ' + JSON.stringify(D[sys.cCommandWorkflows])); await loggers.consoleLog(namespacePrefix + functionName, msg.creturnDataIs + JSON.stringify(returnData)); await loggers.consoleLog(namespacePrefix + functionName, msg.cEND_Function); return returnData; } export default { loadCommandWorkflowsFromPath };