UNPKG

ihub-framework-js

Version:

Legacy version of iHub Framework written in Javascript

104 lines (85 loc) 3.36 kB
// Loads all environment variables from .env file to process.env require('./libs/environment'); // Bootup function const bootup = () => (new Promise(async (resolve, reject) => { /* eslint-disable global-require */ try { const EventEmitter = require('events'); class CustomEmitter extends EventEmitter {} const events = new CustomEmitter(); // Feature object, it's going to be used later to start other modules and the core of the system const feature = { apm: process.env.FT_APM_ENABLED === 'true' || false, logger: require('./logger'), request: require('./request')(), /* eslint-disable no-new-require */ /* eslint-disable new-cap */ events, }; process.on('uncaughtException', (error) => { // Logs the uncaught error for futher treatment /* eslint-disable no-console */ feature.logger.error('uncaughtException', { errorMessage: error.message, error: (typeof error === 'object' && !Array.isArray(error)) ? JSON.stringify(error) : String(error), }); console.error('There was an uncaught error', error); setTimeout(() => { process.exit(1); }, 5000); }); /* Debug */ feature.logger.debug('IHUB Framework is starting'); // Loads the APM if enabled if (feature.apm) { feature.apm = require('elastic-apm-node').start({ serviceName: process.env.NODE_ENV === 'production' ? process.env.PROJECT_NAMESPACE : `${process.env.PROJECT_NAMESPACE}-${process.env.NODE_ENV || 'development'}`, serverUrl: `${process.env.ELASTICSEARCH_APM_HOST}:${process.env.ELASTICSEARCH_APM_PORT}`, }); } /* Database */ feature.database = process.env.FT_DATABASE_ENABLED === 'true' ? await require('./database/connect') : false; /* Server */ feature.server = process.env.FT_SERVER_ENABLED === 'true' ? await require('./server')() : false; /* Tasks */ feature.tasks = process.env.FT_TASKS_ENABLED === 'true' ? await require('./tasks')(feature.apm) : false; /* Kafka */ feature.kafka = process.env.FT_KAFKA_ENABLED === 'true' ? await require('./kafka')() : false; /* Routines */ feature.routines = process.env.FT_ROUTINES_ENABLED === 'true' ? await require('./routines')(feature.apm) : false; /* Core */ // Init the core module and passed all the features to it require('./core').init(feature); /* Plugins */ feature.plugins = await require('./loader/plugins'); // TODO: Remove this|| Re Init the core module and passed all the features to it require('./core').init(feature); /* Global Models */ await require('./database/models'); /* Components */ // Loads the components and its features based on the services enabled await require('./loader/components')(feature.database, feature.tasks, feature.routines, feature.server, feature.kafka); /* Debug */ feature.events.emit('ihub-framework:started'); feature.logger.debug('IHUB Framework started'); resolve(); } catch (error) { /* eslint-disable no-console */ console.log(error); process.exit(1); reject(error); } })); // Check it it's being required or called if (require.main === module) { // Bootup the system bootup(); } else { // Exports the system module.exports = bootup; }