diff options
Diffstat (limited to 'lib/output/callHook.js')
-rw-r--r-- | lib/output/callHook.js | 28 |
1 files changed, 26 insertions, 2 deletions
diff --git a/lib/output/callHook.js b/lib/output/callHook.js index 0db1ff1..f6119fd 100644 --- a/lib/output/callHook.js +++ b/lib/output/callHook.js @@ -1,15 +1,39 @@ +var Promise = require('../utils/promise'); + +function defaultGetArgument() { + return undefined; +} + +function defaultHandleResult(output, result) { + return output; +} /** Call a "global" hook for an output @param {String} name + @param {Function(Output) -> Mixed} getArgument + @param {Function(Output, result) -> Output} handleResult @param {Output} output @return {Promise<Output>} */ -function callHook(name, output) { +function callHook(name, getArgument, handleResult, output) { + getArgument = getArgument || defaultGetArgument; + handleResult = handleResult || defaultHandleResult; -} + var plugins = output.getPlugins(); + return Promise(getArgument(output)) + .then(function(arg) { + return Promise.reduce(plugins, function(prev, plugin) { + var hook = plugin.getHook(name); + return hook(prev); + }, arg); + }) + .then(function(result) { + return handleResult(output, result); + }); +} module.exports = callHook; |