const path = require('path'); const _ = require('lodash'); const Promise = require('bluebird'); const common = require('../../lib/common'); const config = require('../../config'); const Proxy = require('./proxy'); // Get the full path to an app by name function getAppAbsolutePath(name) { return path.join(config.get('paths').internalAppPath, name); } function loadApp(name) { return require(getAppAbsolutePath(name)); } function getAppByName(name) { // Grab the app class to instantiate const AppClass = loadApp(name); const proxy = Proxy.getInstance(); // Check for an actual class, otherwise just use whatever was returned const app = _.isFunction(AppClass) ? new AppClass(proxy) : AppClass; return { app, proxy }; } module.exports = { // Activate a app and return it activateAppByName: function (name) { const {app, proxy} = getAppByName(name); // Check for an activate() method on the app. if (!_.isFunction(app.activate)) { return Promise.reject(new Error(common.i18n.t('errors.apps.noActivateMethodLoadingApp.error', {name: name}))); } // Wrapping the activate() with a when because it's possible // to not return a promise from it. return Promise.resolve(app.activate(proxy)).return(app); } };