cjs-sync-hooks

0.1.1 • Public • Published

CJS-SYNC-HOOKS

Make Your Code Extendable By Creating Hooks for Modifying Behavior and Values

npm version Build Status Coverage Status

Install

npm install --save cjs-sync-hooks

Basic Usage

Create a Hook Instance

var hook = 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 hook
 
  hook.add( 'output', 'prepend-subsystem-name', function( output ){
    var subsystem = 'heroku-formatting-12345',
        prefix = '['+ subsystem + '';
 
    return prefix + output; 
  });

Run Hook Stack

// run "hello world!" through output hook
 
  var output = 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 strings
 
  hook.add( 'stdin', 'handle-string', function( input ){
    if( typeof input !== 'string' ) return;
 
    // do something with string then
    hook.end();
  });
 
 
// add middleware to handle numbers
 
  hook.add( 'stdin', 'handle-number', function( input ){
    if( typeof input !== 'number' ) return;
 
    // do something with number then
    hook.end();
  });
 
 
// run data from stdin through hook
 
  process.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 html
 
  hook.add( 'message-to-send', 'markdown-to-html', function( message ){
    var pre_markdown_expanded_message = hook.run( 'pre-markdown-to-html', message );
 
    // convert markdown to html
    return markdown_expanded_message;
  });
 
 
// add middleware to hook that runs in middleware of another hook running
 
  hook.add( 'pre-markdown-to-html', 'convert-url-to-markdown-link', function( message ){
 
    // replace urls with markdown links
    return url_to_markdown_message;
  });
 
 
// pass outbound messages through nested hooks
 
  app.send( hook.run( 'message-to-send', {
    to: 'timmy',
    from: 'tommy',
    content: 'you should check *this* out https://youtu.be/dQw4w9WgXcQ'
  }));

Readme

Keywords

none

Package Sidebar

Install

npm i cjs-sync-hooks

Weekly Downloads

8

Version

0.1.1

License

MIT

Last publish

Collaborators

  • akamaozu