You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Make Your Code Extendable By Creating Hooks for Modifying Behavior and Values
Install
npminstall--savecjs-sync-hooks
Basic Usage
Create a Hook Instance
varhook=require('cjs-sync-hooks')();
Add Middleware to a Hook Stack
Middleware: function that executes whenever its associated hook is run.
Hook Stack: collection of hook middleware.
// add 'prepend-subsystem-name' middleware to output hookhook.add('output','prepend-subsystem-name',function(output){varsubsystem='heroku-formatting-12345',prefix='['+subsystem+'] ';returnprefix+output;});
Run Hook Stack
// run "hello world!" through output hookvaroutput=hook.run('output','hello world!');console.log(output);// [heroku-formatting-12345] hello world!
Advanced Usage
Prematurely Stop Running Hook Stack
You can exit a running hook stack early using hook.end.
Why?
Pattern-Matching: exit stack when compatible middleware is found.
// add middleware to handle stringshook.add('stdin','handle-string',function(input){if(typeofinput!=='string')return;// do something with string thenhook.end();});// add middleware to handle numbershook.add('stdin','handle-number',function(input){if(typeofinput!=='number')return;// do something with number thenhook.end();});// run data from stdin through hookprocess.on('data',function(data){hook.run('stdin',data);});
Nested Hooks
I heard you like hooks so I made it possible to run hooks in middleware running while hooks are running
// add middleware that converts markdown to htmlhook.add('message-to-send','markdown-to-html',function(message){varpre_markdown_expanded_message=hook.run('pre-markdown-to-html',message);// convert markdown to htmlreturnmarkdown_expanded_message;});// add middleware to hook that runs in middleware of another hook runninghook.add('pre-markdown-to-html','convert-url-to-markdown-link',function(message){// replace urls with markdown linksreturnurl_to_markdown_message;});// pass outbound messages through nested hooksapp.send(hook.run('message-to-send',{to: 'timmy',from: 'tommy',content: 'you should check *this* out https://youtu.be/dQw4w9WgXcQ'}));
About
Write modular libs and apps by creating hooks where others can insert new behavior or modify data