mirror of
https://github.com/strapi/strapi.git
synced 2025-07-13 12:02:10 +00:00
82 lines
1.9 KiB
JavaScript
82 lines
1.9 KiB
JavaScript
![]() |
'use strict';
|
||
|
|
||
|
/**
|
||
|
* Module dependencies
|
||
|
*/
|
||
|
|
||
|
// Node.js core.
|
||
|
const path = require('path');
|
||
|
|
||
|
// Public node modules.
|
||
|
const _ = require('lodash');
|
||
|
const async = require('async');
|
||
|
|
||
|
// Local utilities.
|
||
|
const dictionary = require('../../../../util/dictionary');
|
||
|
|
||
|
/**
|
||
|
* Async module loader to create a
|
||
|
* dictionary of the external hooks
|
||
|
*/
|
||
|
|
||
|
module.exports = function (strapi) {
|
||
|
const hook = {
|
||
|
|
||
|
/**
|
||
|
* Initialize the hook
|
||
|
*/
|
||
|
|
||
|
initialize: function (cb) {
|
||
|
async.auto({
|
||
|
|
||
|
// Load external hooks from the `node_modules` directory.
|
||
|
externalHooks: function (cb) {
|
||
|
dictionary.optional({
|
||
|
dirname: path.resolve(strapi.config.appPath, 'node_modules'),
|
||
|
filter: /^(package\.json)$/,
|
||
|
excludeDirs: /^\./,
|
||
|
depth: 2
|
||
|
}, cb);
|
||
|
}
|
||
|
},
|
||
|
|
||
|
// Callback.
|
||
|
function (err, hooks) {
|
||
|
|
||
|
// Just in case there is an error.
|
||
|
if (err) {
|
||
|
return cb(err);
|
||
|
}
|
||
|
|
||
|
// Add the loaded hooks into the hook dictionary exposed at `strapi.hooks`.
|
||
|
_.extend(strapi.hooks, _.reduce(hooks.externalHooks, function (memo, module, identity) {
|
||
|
if (module['package.json'] && module['package.json'].strapi && module['package.json'].strapi.isHook) {
|
||
|
const hookName = identity.match(/^strapi-/) ? identity.replace(/^strapi-/, '') : identity;
|
||
|
memo[hookName] = require(path.resolve(strapi.config.appPath, 'node_modules', identity));
|
||
|
}
|
||
|
return memo;
|
||
|
}, {}));
|
||
|
|
||
|
cb();
|
||
|
});
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Reload the hook
|
||
|
*/
|
||
|
|
||
|
reload: function () {
|
||
|
hook.initialize(function (err) {
|
||
|
if (err) {
|
||
|
strapi.log.error('Failed to reinitialize the external hooks.');
|
||
|
strapi.stop();
|
||
|
} else {
|
||
|
strapi.emit('hook:_hooks:reloaded');
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
};
|
||
|
|
||
|
return hook;
|
||
|
};
|