kvell-scripts
Version:
Scripts to run applications generated from create-kvell-app
64 lines (55 loc) • 1.79 kB
JavaScript
const path = require("path");
const chalk = require("chalk");
const parsedConfigInit = require("../config/pluginDefaultConfig");
const configFileName = "kvell-plugins.js";
const configErrorKeys = ["databasePlugins"];
const createConfigObject = parsedConfigs => {
const configKeysStatus = {
databasePlugins: {
valid: !parsedConfigs.databasePlugins ? true : Array.isArray(parsedConfigs.databasePlugins)
}
};
const { databasePlugins } = configKeysStatus;
let configObject = {};
if (!databasePlugins.valid) {
const errorString = `Your ./${configFileName} contains invalid plugin config values for:\n${configErrorKeys
.filter(configKey => !configKeysStatus[configKey].valid)
.map((errorKey, index) => `${index + 1}. ${errorKey}`)
.join("\n")}\n`;
throw new Error(errorString);
} else {
configObject = {
databasePlugins: parsedConfigs.databasePlugins || parsedConfigInit.databasePlugins
};
}
return configObject;
};
/**
*
* @typedef {Object} PluginConfig
* @property {{}[]} databasePlugins
*/
/**
* @returns {Promise<PluginConfig>}
*/
const parsePluginConfig = async appSrcDirectory => {
let parsedPluginConfig = parsedConfigInit;
const configFilePath = path.join(appSrcDirectory, `./${configFileName}`);
let parsedConfigObject;
try {
parsedConfigObject = require(configFilePath);
parsedPluginConfig = createConfigObject(parsedConfigObject);
} catch (exception) {
if (exception.code !== "MODULE_NOT_FOUND") {
throw exception;
}
console.log();
console.log(
`${chalk.bgYellow.black("WARN")} ${chalk.yellowBright(
"No kvell-plugins.js found. Initializing plugins as empty."
)}`
);
}
return parsedPluginConfig;
};
module.exports = parsePluginConfig;