Ghost/core/server/utils/labs.js
Hannah Wolfe 243b387063 Helper Proxy & single express-hbs instance (#8225)
refs #8126, #8221, #8223

 New 'Proxy' for all helper requires
- this is not currently enforced, but could be, much like apps
- the proxy object is HUGE
- changed date to use SafeString, this should have been there anyway
- use the proxy for all helpers, including those in apps 😁

 🎨 Single instance of hbs for theme + for errors
- we now have theme/engine instead of requiring express-hbs everywhere
- only error-handler still also requires express-hbs, this is so that we can render errors without extra crud
- TODO: remove the asset helper after #8126 IF it is not needed, or else remove the TODO

🎨 Cleanup visibility utils
🎨 Clean up the proxy a little bit
🚨 Unskip test as it now works!
🎨 Minor amends as per comments
2017-04-04 18:07:35 +02:00

47 lines
1.4 KiB
JavaScript

var settingsCache = require('../settings/cache'),
_ = require('lodash'),
Promise = require('bluebird'),
SafeString = require('../themes/engine').SafeString,
errors = require('../errors'),
logging = require('../logging'),
i18n = require('../i18n'),
labs = module.exports = {};
labs.isSet = function isSet(flag) {
var labsConfig = settingsCache.get('labs');
return labsConfig && labsConfig[flag] && labsConfig[flag] === true;
};
labs.enabledHelper = function enabledHelper(options, callback) {
var errDetails, errString;
if (labs.isSet(options.flagKey) === true) {
// helper is active, use the callback
return callback();
}
// Else, the helper is not active and we need to handle this as an error
errDetails = {
message: i18n.t('warnings.helpers.helperNotAvailable', {helperName: options.helperName}),
context: i18n.t('warnings.helpers.flagMustBeEnabled', {
helperName: options.helperName,
flagName: options.flagName
}),
help: i18n.t('warnings.helpers.seeLink', {url: options.helpUrl})
};
logging.error(new errors.GhostError(errDetails));
errString = new SafeString(
'<script>console.error("' + _.values(errDetails).join(' ') + '");</script>'
);
if (options.async) {
return Promise.resolve(function asyncError() {
return errString;
});
}
return errString;
};