mirror of
https://github.com/AsgardEternal/SquadJS.git
synced 2024-09-29 01:44:26 -05:00
49 lines
1.5 KiB
JavaScript
49 lines
1.5 KiB
JavaScript
import readConfig from './read-config.js';
|
|
import buildSquadServer from './build-squad-server.js';
|
|
import buildConnectors from './build-connectors.js';
|
|
|
|
import plugins from 'plugins';
|
|
|
|
export default async function (configPath) {
|
|
console.log('SquadJS factory commencing building...');
|
|
|
|
console.log('Getting config file...');
|
|
const config = readConfig(configPath);
|
|
|
|
console.log('Building Squad server...');
|
|
const server = buildSquadServer(config);
|
|
|
|
console.log('Initialising connectors...');
|
|
const connectors = await buildConnectors(config);
|
|
|
|
console.log('Loading plugins...');
|
|
for (const pluginConfig of config.plugins) {
|
|
if (pluginConfig.disabled) continue;
|
|
|
|
console.log(`Loading plugin ${pluginConfig.plugin}...`);
|
|
const plugin = plugins[pluginConfig.plugin];
|
|
|
|
const options = {};
|
|
for (const optionName of Object.keys(plugin.optionsSpec)) {
|
|
const option = plugin.optionsSpec[optionName];
|
|
|
|
if (option.type.match(/Connector$/)) {
|
|
options[optionName] = connectors[pluginConfig[optionName]];
|
|
} else {
|
|
if (option.required) {
|
|
if (!(optionName in pluginConfig))
|
|
throw new Error(`${plugin.name}: ${optionName} is required but missing.`);
|
|
if (option.default === pluginConfig[optionName])
|
|
throw new Error(`${plugin.name}: ${optionName} is required but is the default value.`);
|
|
}
|
|
|
|
options[optionName] = pluginConfig[optionName] || option.default;
|
|
}
|
|
}
|
|
|
|
await plugin.init(server, options);
|
|
}
|
|
|
|
return server;
|
|
}
|