@haystacks/async
Version:
A framework to build any number or any kind of native application or automation solution.
624 lines (603 loc) • 32.8 kB
JavaScript
/**
* @file plugins.js
* @module plugins
* @description Contains all of the plugin and plugin registry commands.
* @requires module:chiefPlugin
* @requires module:warden
* @requires module:loggers
* @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/09/16
* @copyright Copyright © 2022-… by Seth Hollingsead. All rights reserved
*/
// Internal imports
import chiefPlugin from '../../controllers/chiefPlugin.js';
import warden from '../../controllers/warden.js';
import loggers from '../../executrix/loggers.js';
// External imports
import hayConst from '@haystacks/constants';
import path from 'path';
const {bas, msg, sys, wrd} = hayConst;
const baseFileName = path.basename(import.meta.url, path.extname(import.meta.url));
// framework.commandsBlob.commands.plugins.
const namespacePrefix = wrd.cframework + bas.cDot + sys.ccommandsBlob + bas.cDot + wrd.ccommands + bas.cDot + baseFileName + bas.cDot;
/**
* @function listAllLoadedPlugins
* @description This is a command function that calls the warden.listLoadedPlugins function
* @param {string} inputData Not used for this command.
* @param {string} inputMetaData Not used for this command.
* @return {array<boolean,array<string>>} An array with a boolean True or False value to indicate if
* the application should exit or not, followed by the list of plugins that have been loaded.
* @author Seth Hollingsead
* @date 2023/02/06
*/
async function listAllLoadedPlugins(inputData, inputMetaData) {
let functionName = listAllLoadedPlugins.name;
await loggers.consoleLog(namespacePrefix + functionName, msg.cBEGIN_Function);
await loggers.consoleLog(namespacePrefix + functionName, msg.cinputDataIs + JSON.stringify(inputData));
await loggers.consoleLog(namespacePrefix + functionName, msg.cinputMetaDataIs + inputMetaData);
let returnData = [true, []];
returnData[1] = await warden.listLoadedPlugins();
// List of loaded plugins is:
console.log(msg.clistAllLoadedPluginsMessage01 + returnData[1].join(bas.cComa));
if (returnData[1] === false) {
// ERROR: There was an error getting the list of loaded plugins.
console.log(namespacePrefix + functionName + msg.cErrorListAllLoadedPluginsMessage01);
}
await loggers.consoleLog(namespacePrefix + functionName, msg.creturnDataIs + JSON.stringify(returnData));
await loggers.consoleLog(namespacePrefix + functionName, msg.cEND_Function);
return returnData;
}
/**
* @function listAllPluginsInRegistry
* @description This is a command function that calls the chiefPlugin.getAllPluginsInRegistry function.
* @param {string} inputData Not used for this command.
* @param {string} inputMetaData Not used for this command.
* @return {array<boolean,array<string>>} An array with a boolean True or False value to indicate if
* the application should exit or not exit, followed by the list of plugins in the registry.
* @author Seth Hollingsead
* @date 2022/09/16
*/
async function listAllPluginsInRegistry(inputData, inputMetaData) {
let functionName = listAllPluginsInRegistry.name;
await loggers.consoleLog(namespacePrefix + functionName, msg.cBEGIN_Function);
await loggers.consoleLog(namespacePrefix + functionName, msg.cinputDataIs + JSON.stringify(inputData));
await loggers.consoleLog(namespacePrefix + functionName, msg.cinputMetaDataIs + inputMetaData);
let returnData = [true, []];
returnData[1] = await chiefPlugin.getAllPluginsInRegistry();
// List of plugins in registry is:
console.log(msg.clistOfPluginsInRegistryIs + returnData[1].join(bas.cComa));
if (returnData[1] === false) {
// ERROR: There was an error getting the list of plugins from the registry.
console.log(namespacePrefix + functionName, + msg.cErrorListAllPluginsInRegistryCommandMessage01);
}
await loggers.consoleLog(namespacePrefix + functionName, msg.creturnDataIs + JSON.stringify(returnData));
await loggers.consoleLog(namespacePrefix + functionName, msg.cEND_Function);
return returnData;
}
/**
* @function listAllPluginsInRegistryPath
* @description This is a command function that calls the chiefPlugin.getAllPluginsInRegistryPath function.
* @param {string} inputData Not used for this command.
* @param {string} inputMetaData Not used for this command.
* @return {array<boolean,array<string>>} An array with a boolean True or False value to indicate if
* the application should exit or not exit, followed by the list of plugins in the plugins registry path.
* @author Seth Hollingsead
* @date 2022/09/16
*/
async function listAllPluginsInRegistryPath(inputData, inputMetaData) {
let functionName = listAllPluginsInRegistryPath.name;
await loggers.consoleLog(namespacePrefix + functionName, msg.cBEGIN_Function);
await loggers.consoleLog(namespacePrefix + functionName, msg.cinputDataIs + JSON.stringify(inputData));
await loggers.consoleLog(namespacePrefix + functionName, msg.cinputMetaDataIs + inputMetaData);
let returnData = [true, []];
returnData[1] = await chiefPlugin.getAllPluginsInRegistryPath();
if (returnData[1] === false) {
// ERROR: There was an error getting the list of plugins from the path listed in the plugin registry.
console.log(namespacePrefix + functionName + msg.cErrorListAllPluginsInRegistryPathCommandMessage01);
}
await loggers.consoleLog(namespacePrefix + functionName, msg.creturnDataIs + JSON.stringify(returnData));
await loggers.consoleLog(namespacePrefix + functionName, msg.cEND_Function);
return returnData;
}
/**
* @function countPluginsInRegistry
* @description This is a command function that calls the chiefPlugin.countAllPluginsInRegistry function.
* @param {string} inputData Not used for this command.
* @param {string} inputMetaData Not used for this command.
* @return {array<boolean,integer>} An array with a boolean True or False value to indicate if
* the application should exit or not exit, followed by the number of plugins found in the plugins registry.
* @author Seth Hollingsead
* @date 2022/09/16
*/
async function countPluginsInRegistry(inputData, inputMetaData) {
let functionName = countPluginsInRegistry.name;
await loggers.consoleLog(namespacePrefix + functionName, msg.cBEGIN_Function);
await loggers.consoleLog(namespacePrefix + functionName, msg.cinputDataIs + JSON.stringify(inputData));
await loggers.consoleLog(namespacePrefix + functionName, msg.cinputMetaDataIs + inputMetaData);
let returnData = [true, []];
returnData[1] = await chiefPlugin.countAllPluginsInRegistry();
if (returnData[1] === false) {
// ERROR: There was an error getting the number of plugins in the plugin registry.
console.log(namespacePrefix + functionName + msg.cErrorCountPluginsInRegistryCommandMessage01);
}
await loggers.consoleLog(namespacePrefix + functionName, msg.creturnDataIs + JSON.stringify(returnData));
await loggers.consoleLog(namespacePrefix + functionName, msg.cEND_Function);
return returnData;
}
/**
* @function countPluginsInRegistryPath
* @description This is a command function that calls the chiefPlugin.countAllPluginsInRegistryPath.
* @param {string} inputData Not used for this command.
* @param {string} inputMetaData Not used for this command.
* @return {array<boolean,integer>} An array with a boolean True or False value to indicate if
* the application should exit or not exit, followed by the number of plugins found in the plugins registry.
* @author Seth Hollingsead
* @date 2022/09/16
*/
async function countPluginsInRegistryPath(inputData, inputMetaData) {
let functionName = countPluginsInRegistryPath.name;
await loggers.consoleLog(namespacePrefix + functionName, msg.cBEGIN_Function);
await loggers.consoleLog(namespacePrefix + functionName, msg.cinputDataIs + JSON.stringify(inputData));
await loggers.consoleLog(namespacePrefix + functionName, msg.cinputMetaDataIs + inputMetaData);
let returnData = [true, []];
returnData[1] = await chiefPlugin.countAllPluginsInRegistryPath();
if (returnData[1] === false) {
// ERROR: There was an error getting the number of plugins in the path listed in the plugin registry.
console.log(namespacePrefix + functionName + msg.cErrorCountPluginsInRegistryPathCommandMessage01);
}
await loggers.consoleLog(namespacePrefix + functionName, msg.creturnDataIs + JSON.stringify(returnData));
await loggers.consoleLog(namespacePrefix + functionName, msg.cEND_Function);
return returnData;
}
/**
* @function registerPlugin
* @description This is a command function that calls the chiefPlugin.registerNamedPlugin function.
* @param {array<string>} inputData An array that could actually contain anything,
* depending on what the user entered. But the function filters all of that internally and
* extracts the case the user has entered the correct input as follows:
* inputData[0] = 'registerPlugin'
* inputData[1] = pluginName
* inputData[2] = pluginPath
* @param {string} inputMetaData Not used for this command.
* @return {array<boolean,boolean>} An array with a boolean True or False value to indicate if
* the application should exit or not exit, followed by another boolean value to indicate if the plugin was registered successfully or not.
* @author Seth Hollingsead
* @date 2022/09/16
*/
async function registerPlugin(inputData, inputMetaData) {
let functionName = registerPlugin.name;
await loggers.consoleLog(namespacePrefix + functionName, msg.cBEGIN_Function);
await loggers.consoleLog(namespacePrefix + functionName, msg.cinputDataIs + JSON.stringify(inputData));
await loggers.consoleLog(namespacePrefix + functionName, msg.cinputMetaDataIs + inputMetaData);
let returnData = [true, false];
let pluginName = '';
let pluginPath = '';
let foundValidData = false;
if (inputData.length === 3 && typeof(inputData[1]) === wrd.cstring && typeof(inputData[2]) === wrd.cstring) {
pluginName = inputData[1];
pluginPath = inputData[2];
foundValidData = true;
} else if (inputData.length === 2 && typeof(inputData[1]) === wrd.cstring) {
if (inputData[1].includes(bas.cComa) === true) {
let pluginParametersArray = inputData[1].split(bas.cComa);
pluginName = pluginParametersArray[0];
pluginPath = pluginParametersArray[1];
foundValidData = true;
} else {
// The user must have only entered the name of the plugin they want to register.
// We should look up the plugin root path in the plugin registry and scan that folder to
// determine if a matching folder name that matches the user entered plugin name.
// If we find a match there, then we can just use that path.
pluginName = inputData[1];
// Check to see if this plugin name is found among the folders that are contained in the plugins registry path.
let pluginNameFolderMatchFound = false;
let pluginsInRegistryPathArray = await chiefPlugin.getAllPluginsInRegistryPath();
for (let pluginNameKey in pluginsInRegistryPathArray) {
let pluginNameFromPath = pluginsInRegistryPathArray[pluginNameKey];
if (pluginName === pluginNameFromPath) {
pluginNameFolderMatchFound = true;
break;
}
} // End-for (let pluginNameKey in pluginsInRegistryPathArray)
if (pluginNameFolderMatchFound === true) {
foundValidData = true;
pluginPath = await chiefPlugin.getPluginsRegistryPath();
} else {
// ERROR: Failure to find a matching plugin for the specified plugin name:
console.log(msg.cErrorRegisterPluginCommandMessage02 + JSON.stringify(pluginName));
}
}
} else {
// ERROR: Failure to register the specified plugin, invalid input:
console.log(msg.cErrorRegisterPluginCommandMessage01 + JSON.stringify(inputData));
}
if (foundValidData === true) {
returnData[1] = await chiefPlugin.registerNamedPlugin(pluginName, pluginPath);
}
await loggers.consoleLog(namespacePrefix + functionName, msg.creturnDataIs + JSON.stringify(returnData));
await loggers.consoleLog(namespacePrefix + functionName, msg.cEND_Function);
return returnData;
}
/**
* @function unregisterPlugin
* @description This is a command function that calls the chiefPlugin.unregisterNamedPlugin function.
* @param {array<string>} inputData An array that could actually contain anything,
* depending on what the user entered. But the function filters all of that internally and
* extracts the case the user has entered the correct input as follows:
* inputData[0] = 'unregisterPlugin'
* inputData[1] = pluginName
* @param {string} inputMetaData Not used for this command.
* @return {array<boolean,boolean>} An array with a boolean True or False value to indicate if
* the application should exit or not exit, followed by another boolean value to indicate if
* the plugin was unregistered successfully or not.
* @author Seth Hollingsead
* @date 2022/09/16
*/
async function unregisterPlugin(inputData, inputMetaData) {
let functionName = unregisterPlugin.name;
await loggers.consoleLog(namespacePrefix + functionName, msg.cBEGIN_Function);
await loggers.consoleLog(namespacePrefix + functionName, msg.cinputDataIs + JSON.stringify(inputData));
await loggers.consoleLog(namespacePrefix + functionName, msg.cinputMetaDataIs + inputMetaData);
let returnData = [true, false];
if (Array.isArray(inputData) === true && inputData.length === 2 && typeof(inputData[1]) === wrd.cstring) {
returnData[1] = await chiefPlugin.unregisterNamedPlugin(inputData[1]);
} else {
// ERROR: Failure to unregister the specified plugin, invalid input:
console.log(msg.cErrorUnregisterPluginCommandMessage01 + JSON.stringify(inputData));
}
await loggers.consoleLog(namespacePrefix + functionName, msg.creturnDataIs + JSON.stringify(returnData));
await loggers.consoleLog(namespacePrefix + functionName, msg.cEND_Function);
return returnData;
}
/**
* @function unregisterPlugins
* @description This is a command function that calls chiefPlugin.unregisterPlugins function.
* @param {array<string>} inputData An array that could actually contain anything,
* depending on what the user entered. But the function filters all of that internally and
* extracts the case the user has entered the correct input as follows:
* inputData[0] = 'unregisterPlugins'
* inputData[1] = pluginName1,pluginName2,pluginNameX...
* @param {string} inputMetaData Not used for this command.
* @return {array<boolean,boolean>} An array with a boolean True or False value to indicate if
* the application should exit or not exit, followed by another boolean value to indicate if
* the plugins were unregistered successfully or not.
* @author Seth Hollingsead
* @date 2023/02/07
*/
async function unregisterPlugins(inputData, inputMetaData) {
let functionName = unregisterPlugins.name;
await loggers.consoleLog(namespacePrefix + functionName, msg.cBEGIN_Function);
await loggers.consoleLog(namespacePrefix + functionName, msg.cinputDataIs + JSON.stringify(inputData));
await loggers.consoleLog(namespacePrefix + functionName, msg.cinputMetaDataIs + inputMetaData);
let returnData = [true, false];
let pluginListArray = [];
if (Array.isArray(inputData) === true && inputData.length >= 2 && typeof(inputData[1]) === wrd.cstring) {
if (inputData[1].includes(bas.cComa) === true) {
pluginListArray = inputData[1].split(bas.cComa);
} else if (inputData.length >= 3) {
inputData.shift();
pluginListArray = inputData;
}
returnData[1] = await chiefPlugin.unregisterPlugins(pluginListArray);
} else {
// ERROR: Failure to unregister any of the specified plugins, invalid input:
console.log(msg.cErrorUnregisterPluginsCommandMessage01 + JSON.stringify(inputData));
}
await loggers.consoleLog(namespacePrefix + functionName, msg.creturnDataIs + JSON.stringify(returnData));
await loggers.consoleLog(namespacePrefix + functionName, msg.cEND_Function);
return returnData;
}
/**
* @function syncPluginRegistryWithPath
* @description This is a command function that calls the chiefPlugin.synchronizePluginRegistryWithPath function.
* @param {string} inputData Not used for this command.
* @param {string} inputMetaData Not used for this command.
* @return {array<boolean,boolean>} An array with a boolean True or False value to indicate if
* the application should exit or not exit, followed by another boolean value to indicate if
* the plugin registry synchronization was successful or not.
* @author Seth Hollingsead
* @date 2022/09/16
*/
async function syncPluginRegistryWithPath(inputData, inputMetaData) {
let functionName = syncPluginRegistryWithPath.name;
await loggers.consoleLog(namespacePrefix + functionName, msg.cBEGIN_Function);
await loggers.consoleLog(namespacePrefix + functionName, msg.cinputDataIs + JSON.stringify(inputData));
await loggers.consoleLog(namespacePrefix + functionName, msg.cinputMetaDataIs + inputMetaData);
let returnData = [true, false];
returnData[1] = await chiefPlugin.synchronizePluginRegistryWithPath();
if (returnData[1] === false) {
// ERROR: Failure to synchronize the plugin registry with the plugin path listed in the plugin registry.
console.log(namespacePrefix + functionName + msg.cErrorSyncPluginRegistryWithPathCommandMessage01);
}
await loggers.consoleLog(namespacePrefix + functionName, msg.creturnDataIs + JSON.stringify(returnData));
await loggers.consoleLog(namespacePrefix + functionName, msg.cEND_Function);
return returnData;
}
/**
* @function listPluginsRegistryPath
* @description Prints out the plugins path that is listed in the plugin registry meta-data.
* @param {string} inputData Not used for this command.
* @param {string} inputMetaData Not used for this command.
* @return {array<boolean,string>} An array with a boolean True or False value to indicate if
* the application should exit or not exit, followed by a string that is the plugins path.
* @author Seth Hollingsead
* @date 2023/02/07
*/
async function listPluginsRegistryPath(inputData, inputMetaData) {
let functionName = listPluginsRegistryPath.name;
await loggers.consoleLog(namespacePrefix + functionName, msg.cBEGIN_Function);
await loggers.consoleLog(namespacePrefix + functionName, msg.cinputDataIs + JSON.stringify(inputData));
await loggers.consoleLog(namespacePrefix + functionName, msg.cinputMetaDataIs + inputMetaData);
let returnData = [true, false];
returnData[1] = await chiefPlugin.getPluginsRegistryPath();
// plugins registry path is:
console.log(msg.cpluginsRegistryPathMessageIs + returnData[1]);
await loggers.consoleLog(namespacePrefix + functionName, msg.creturnDataIs + JSON.stringify(returnData));
await loggers.consoleLog(namespacePrefix + functionName, msg.cEND_Function);
return returnData;
}
/**
* @function unregisterAllPlugins
* @description This is a command function that calls the chiefPlugin.clearPluginRegistry function.
* @param {string} inputData Not used for this command.
* @param {string} inputMetaData Not used for this command.
* @return {array<boolean,boolean>} An array with a boolean True or False value to indicate if
* the application should exit or not exit, followed by another boolean value to indicate if
* all the plugins were unregistered successfully or not.
* @author Seth Hollingsead
* @date 2022/09/16
*/
async function unregisterAllPlugins(inputData, inputMetaData) {
let functionName = unregisterAllPlugins.name;
await loggers.consoleLog(namespacePrefix + functionName, msg.cBEGIN_Function);
await loggers.consoleLog(namespacePrefix + functionName, msg.cinputDataIs + JSON.stringify(inputData));
await loggers.consoleLog(namespacePrefix + functionName, msg.cinputMetaDataIs + inputMetaData);
let returnData = [true, false];
returnData[1] = await chiefPlugin.clearPluginRegistry();
if (returnData[1] === false) {
// ERROR: Failure to unregister all plugins.
console.log(namespacePrefix + functionName + msg.cErrorUnregisterAllPluginsCommandMessage01);
}
await loggers.consoleLog(namespacePrefix + functionName, msg.creturnDataIs + JSON.stringify(returnData));
await loggers.consoleLog(namespacePrefix + functionName, msg.cEND_Function);
return returnData;
}
/**
* @function savePluginRegistryToDisk
* @description This is a command function that calls the chiefPlugin.savePluginRegistryDisk function.
* @param {string} inputData Not used for this command.
* @param {string} inputMetaData Not used for this command.
* @return {array<boolean,boolean>} An array with a boolean True or False value to indicate if
* the application should exit or not exit, followed by another boolean value to indicate if
* the plugin registry was saved successfully or not.
* @author Seth Hollingsead
* @date 2022/09/16
*/
async function savePluginRegistryToDisk(inputData, inputMetaData) {
let functionName = savePluginRegistryToDisk.name;
await loggers.consoleLog(namespacePrefix + functionName, msg.cBEGIN_Function);
await loggers.consoleLog(namespacePrefix + functionName, msg.cinputDataIs + JSON.stringify(inputData));
await loggers.consoleLog(namespacePrefix + functionName, msg.cinputMetaDataIs + inputMetaData);
let returnData = [true, false];
returnData[1] = await chiefPlugin.savePluginRegistryDisk();
if (returnData[1] === false) {
// ERROR: Failure to save the plugin registry to the hard drive.
console.log(namespacePrefix + functionName + msg.cErrorSavePluginRegistryToDiskCommandMessage01);
}
await loggers.consoleLog(namespacePrefix + functionName, msg.creturnDataIs + JSON.stringify(returnData));
await loggers.consoleLog(namespacePrefix + functionName, msg.cEND_Function);
return returnData;
}
/**
* @function loadPlugin
* @description This is a command function that calls the the warden.loadPlugin function.
* @param {array<string>} inputData An array that could actually contain anything,
* depending on what the user entered. But the function filters all of that internally and
* extracts the case the user has entered the correct input as follows:
* inputData[0] = 'loadPlugin'
* inputData[1] = pluginPath - The fully qualified path where to load the plugin from, or
* the name of the plugin folder in the plugins registry path where the plugin can be found.
* @param {string} inputMetaData Not used for this command.
* @return {array<boolean,boolean>} An array with a boolean True or False value to indicate if
* the application should exit or not exit, followed by another boolean value to indicate if
* the plugin was loaded successfully or not.
* @author Seth Hollingsead
* @date 2022/09/16
*/
async function loadPlugin(inputData, inputMetaData) {
let functionName = loadPlugin.name;
await loggers.consoleLog(namespacePrefix + functionName, msg.cBEGIN_Function);
await loggers.consoleLog(namespacePrefix + functionName, msg.cinputDataIs + JSON.stringify(inputData));
await loggers.consoleLog(namespacePrefix + functionName, msg.cinputMetaDataIs + inputMetaData);
let returnData = [true, false];
if (inputData.length === 2 && typeof(inputData[1]) === wrd.cstring) {
returnData[1] = await warden.loadPlugin(inputData[1]);
} else {
// ERROR: Failure to load the specified plugin, invalid input:
console.log(msg.cErrorLoadPluginCommandMessage01 + JSON.stringify(inputData));
}
await loggers.consoleLog(namespacePrefix + functionName, msg.creturnDataIs + JSON.stringify(returnData));
await loggers.consoleLog(namespacePrefix + functionName, msg.cEND_Function);
return returnData;
}
/**
* @function loadPlugins
* @description This is a command function that calls the warden.loadPlugins function.
* @param {array<string,array<string>>} inputData An array that could actually contain anything,
* depending on what the user entered. But the function filters all of that internally and
* extracts the case the user has entered the correct input as follows:
* inputData[0] = 'loadPlugins'
* inputData[1] = Array of fully qualified plugin paths were to load all the plugins from.
* @param {string} inputMetaData Not used for this command.
* @return {array<boolean,boolean>} An array with a boolean True or False value to indicate if
* the application should exit or not exit, followed by another boolean value to indicate if
* all the plugins were loaded successfully or not.
* @author Seth Hollingsead
* @date 2022/09/16
*/
async function loadPlugins(inputData, inputMetaData) {
let functionName = loadPlugins.name;
await loggers.consoleLog(namespacePrefix + functionName, msg.cBEGIN_Function);
await loggers.consoleLog(namespacePrefix + functionName, msg.cinputDataIs + JSON.stringify(inputData));
await loggers.consoleLog(namespacePrefix + functionName, msg.cinputMetaDataIs + inputMetaData);
let returnData = [true, false];
let pluginsArray = [];
if (Array.isArray(inputData) === true && inputData.length >= 2) {
if (inputData[1].includes(bas.cComa) === true) {
pluginsArray = inputData[1].split(bas.cComa);
} else {
inputData.shift(); // Remove the first entry, and just pass the rest of the array.
pluginsArray = inputData;
}
returnData[1] = await warden.loadPlugins(pluginsArray);
} else {
// ERROR: Failure to load the specified plugins, invalid input:
console.log(msg.cErrorLoadPluginsCommandMessage01 + JSON.stringify(inputData));
}
await loggers.consoleLog(namespacePrefix + functionName, msg.creturnDataIs + JSON.stringify(returnData));
await loggers.consoleLog(namespacePrefix + functionName, msg.cEND_Function);
return returnData;
}
/**
* @function loadPluginsFromRegistry
* @description This is a command function that calls the warden.loadPluginsFromRegistry function.
* @param {string} inputData Not used for this command.
* @param {string} inputMetaData Not used for this command.
* @return {array<boolean,boolean>} An array with a boolean True or False value to indicate if
* the application should exit or not exit, followed by another boolean value to indicate if
* all the plugins from the plugin registry were loaded successfully or not.
* @author Seth Hollingsead
* @date 2022/09/16
*/
async function loadPluginsFromRegistry(inputData, inputMetaData) {
let functionName = loadPluginsFromRegistry.name;
await loggers.consoleLog(namespacePrefix + functionName, msg.cBEGIN_Function);
await loggers.consoleLog(namespacePrefix + functionName, msg.cinputDataIs + JSON.stringify(inputData));
await loggers.consoleLog(namespacePrefix + functionName, msg.cinputMetaDataIs + inputMetaData);
let returnData = [true, false];
returnData[1] = await warden.loadPluginsFromRegistry();
if (returnData[1] === false) {
// ERROR: Failure to load the plugins from the plugin registry.
console.log(namespacePrefix + functionName + msg.cErrorLoadPluginsFromRegistryCommandMessage01);
}
await loggers.consoleLog(namespacePrefix + functionName, msg.creturnDataIs + JSON.stringify(returnData));
await loggers.consoleLog(namespacePrefix + functionName, msg.cEND_Function);
return returnData;
}
/**
* @function unloadPlugin
* @description This is a command function that calls the warden.unloadPlugin function.
* @param {array<string>} inputData An array that could actually contain anything,
* depending on what the user entered. But the function filters all of that internally and
* extracts the case the user has entered the correct input as follows:
* inputData[0] = 'unloadPlugin'
* inputData[1] = pluginName - The name of the plugin that should be unloaded.
* @param {string} inputMetaData Not used for this command.
* @return {array<boolean,boolean>} An array with a boolean True or False value to indicate if
* the application should exit or not exit, followed by another boolean value to indicate if
* the specified plugin was unloaded successfully or not.
* @author Seth Hollingsead
* @date 2022/09/16
*/
async function unloadPlugin(inputData, inputMetaData) {
let functionName = unloadPlugin.name;
await loggers.consoleLog(namespacePrefix + functionName, msg.cBEGIN_Function);
await loggers.consoleLog(namespacePrefix + functionName, msg.cinputDataIs + JSON.stringify(inputData));
await loggers.consoleLog(namespacePrefix + functionName, msg.cinputMetaDataIs + inputMetaData);
let returnData = [true, false];
if (inputData.length === 2 && typeof(inputData[1]) === wrd.cstring) {
returnData[1] = await warden.unloadPlugin(inputData[1]);
} else {
// ERROR: Failure to unload the specified plugin, invalid input:
console.log(msg.cErrorUnloadPluginCommandMessage01 + JSON.stringify(inputData));
}
await loggers.consoleLog(namespacePrefix + functionName, msg.creturnDataIs + JSON.stringify(returnData));
await loggers.consoleLog(namespacePrefix + functionName, msg.cEND_Function);
return returnData;
}
/**
* @function unloadPlugins
* @description This is a command function that calls the warden.unloadPlugins function.
* @param {array<string,array<string>>} inputData An array that could actually contain anything,
* depending on what the user entered. But the function filters all of that internally and
* extracts the case the user has entered the correct input as follows:
* inputData[0] = 'unloadPlugins'
* inputData[1] = Array of plugin names that should be unloaded.
* @param {string} inputMetaData Not used for this command.
* @return {array<boolean,boolean>} An array with a boolean True or False value to indicate if
* the application should exit or not exit, followed by another boolean value to indicate if
* the specified plugin was unloaded successfully or not.
* @author Seth Hollingsead
* @date 2022/09/16
*/
async function unloadPlugins(inputData, inputMetaData) {
let functionName = unloadPlugins.name;
await loggers.consoleLog(namespacePrefix + functionName, msg.cBEGIN_Function);
await loggers.consoleLog(namespacePrefix + functionName, msg.cinputDataIs + JSON.stringify(inputData));
await loggers.consoleLog(namespacePrefix + functionName, msg.cinputMetaDataIs + inputMetaData);
let returnData = [true, false];
let pluginNameArray = [];
if (Array.isArray(inputData) === true && inputData.length >= 2) {
if (inputData.length === 2 && inputData[1].includes(bas.cComa) === true) {
pluginNameArray = inputData[1].split(bas.cComa);
} else {
inputData.shift();
pluginNameArray = inputData;
}
returnData[1] = await warden.unloadPlugins(pluginNameArray);
} else {
// ERROR: Failure to unload the specified plugins, invalid input:
console.log(msg.cErrorUnloadPluginsCommandMessage01 + JSON.stringify(inputData));
}
await loggers.consoleLog(namespacePrefix + functionName, msg.creturnDataIs + JSON.stringify(returnData));
await loggers.consoleLog(namespacePrefix + functionName, msg.cEND_Function);
return returnData;
}
/**
* @function unloadAllPlugins
* @description This is a command function that calls the warden.unloadAllPlugins function.
* @param {string} inputData Not used for this command.
* @param {string} inputMetaData Not used for this command.
* @return {array<boolean,boolean>} An array with a boolean True or False value to indicate if
* the application should exit or not exit, followed by another boolean value to indicate if
* all the plugins were unloaded successfully or not.
* @author Seth Hollingsead
* @date 2022/09/16
*/
async function unloadAllPlugins(inputData, inputMetaData) {
let functionName = unloadAllPlugins.name;
await loggers.consoleLog(namespacePrefix + functionName, msg.cBEGIN_Function);
await loggers.consoleLog(namespacePrefix + functionName, msg.cinputDataIs + JSON.stringify(inputData));
await loggers.consoleLog(namespacePrefix + functionName, msg.cinputMetaDataIs + inputMetaData);
let returnData = [true, false];
returnData[1] = await warden.unloadAllPlugins();
if (returnData[1] === false) {
// ERROR: Failure to unload all the plugins.
console.log(namespacePrefix + functionName + msg.cErrorUnloadAllPluginsCommandMessage01);
}
await loggers.consoleLog(namespacePrefix + functionName, msg.creturnDataIs + JSON.stringify(returnData));
await loggers.consoleLog(namespacePrefix + functionName, msg.cEND_Function);
return returnData;
}
export default {
listAllLoadedPlugins,
listAllPluginsInRegistry,
listAllPluginsInRegistryPath,
countPluginsInRegistry,
countPluginsInRegistryPath,
registerPlugin,
unregisterPlugin,
unregisterPlugins,
syncPluginRegistryWithPath,
listPluginsRegistryPath,
unregisterAllPlugins,
savePluginRegistryToDisk,
loadPlugin,
loadPlugins,
loadPluginsFromRegistry,
unloadPlugin,
unloadPlugins,
unloadAllPlugins
}