bhiv

3.1.45 • Public • Published

Bhiv.js

Bhiv is a utility module which provide a complete syntax to build an asynchronous workflow.

It provides also some basic features like EventEmitter, Object manipulation, or basic functions patterns.

It works on any side

Test:

javascript:(function(s){document.head.appendChild(s);s.src='https://rawgit.com/np42/bhiv/master/Bhiv.js';})(document.createElement('script'));

Install:

<!-- This is not a CDN so don't use it in production -->
<script src="https://rawgit.com/np42/bhiv/master/Bhiv.js"></script>
npm install --save bhiv

Browser Multi Fetching Exemple

// Assuming jQuery & Bhiv loaded
 
var fetchAllJsonpUrl = (function () {
  var priv = { jQuery: {}, console: {} };
  var bhiv = new Bhiv(priv);
 
  priv.console.log = function (data) { console.log('Requesting:', data.name, data.url); };
 
  priv.jQuery.request = function (data, callback) {
    var success = function (data) { return callback(null, data); };
    jQuery.ajax({ url: data.url, dataType: 'jsonp', success: success, error: callback });
  };
 
  return new bhiv.Bee()
 
    // iterating on the direct flow, key is named index, value named url
    .Map('.', 'name', 'url')
 
    // the following is synchronous, that's why '=' character
    .  then('= console.log')
 
    // requesting and storing the result into the content field
    .  then('jQuery.request', null, { url: '${url}', content: '${.}' })
 
    // closing the loop (created by the Map keyword, limit parallel execute to 3 tasks)
    .close({ max: 3 })
 
    // finishing the workflow build
    .end();
 
})();
 
fetchAllJsonpUrl
( { github: 'https://api.github.com', ip: 'http://jsonip.com' }
, function (err, data) { console.log(err, data); }
);

Node Module Example

 
var Bhiv = require('Bhiv');
 
module.exports = new function () {
  var priv = {};
  var bhiv = new Bhiv(priv, this);
 
  this.sayHello = new bhiv.Bee()
    .pipe('= getData', null, { words: '${.}' })
    .Map('words', null, 'word')
    .  pipe('= uppercase', '${word}')
    .close()
    .pipe('= join', '${words}')
    .end();
 
  (function () {
 
    this.getData = function () {
      return ['hello', 'world'];
    };
 
    this.uppercase = function (word, callback) {
      return word.toUpperCase();
    };
 
    this.join = function (array) {
      return array.join(' ');
    };
 
  }).call(priv);
 
};

See full syntax documentation into source code at Bee Builder Syntax

Some methods:

 * Trap(<pattern>, <work>, <inglue>, <outglue>): do <work> if an error match <pattern>
 * Map(<path>, <key>, <value>): iter on <path> and do work for each elements
 *  -> replace the old list value by result
 * Go(<work>, <inglue>, <outglue>): create a une parallel waterfall
 * close(<properties>): close task, and set properties
 * emit(<event>, <data>): to emit an event (maybe catched by a bucket)
 * add(<glue>): allow you to add some thing in the flow
 * flatten(): flatten an inherited data structure
 * pipe(<work>, <inglue>, <outglue>): execute a task after the previous one if any
 *  -> replace the result
 * then(<work>, <inglue>, <outglue>): execute a task after the previous one if any
 *  -> merge the result
 * waterfall(<tasks>): do all tasks sequencially, with data replacing the previous one
 * bucket(<event>, <outglue>, <end>): retrieve data for an <event> even until the <end> event
 * extract(<glue>): extract <glue> pattern from data and keep only it
 * keep(<fields>): keep only field list
 * end(<data>, <callback>): execute the bee or wrap either the <data> or the <callback>

Package Sidebar

Install

npm i bhiv

Weekly Downloads

1

Version

3.1.45

License

MIT

Last publish

Collaborators

  • bhiv