mirror of
https://github.com/TryGhost/Ghost.git
synced 2025-02-03 23:00:14 -05:00
no-issue The instansiation of a Module object was only used so that we could override the require method inside external apps, now we have no support for them, we are free to require the internal apps directly. This has no functionality change.
45 lines
1.3 KiB
JavaScript
45 lines
1.3 KiB
JavaScript
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(name);
|
|
|
|
// 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);
|
|
}
|
|
};
|