baggy

Asynchronous type resolution with dependencies

Usage no npm install needed!

<script type="module">
  import baggy from 'https://cdn.skypack.dev/baggy';
</script>

README

baggy

npm package build code climate coverage issues dependencies devDependencies downloads

This package has been deprecated. Please use ziploc for new projects. The purpose of this package is to provide a way to resolve types asynchronously. Let's take a look at the simplest example:

var Bag = require('baggy');
var bag = new Bag();

bag.create('One')
  .from(function (done) {
    done(null, 1);
  });

bag.resolve('One', function (error, one) {
  console.log(one); // 1
});

We can also create dependencies on other types:

var Bag = require('baggy');
var bag = new Bag();

bag.create('One')
  .from(function (done) {
    done(null, 1);
  });

bag.create('Two')
  .from('One', function (one, done) {
    done(null, one + one);
  });

bag.create('Three')
  .from('One', 'Two', function (one, two, done) {
    done(null, one + two);
  });

bag.resolve('Three', function (error, three) {
  console.log(three); // 3
});

The syntax is nice if you have a collection of static functions, but what if you already have an object with methods? No worries. No need to repeat yourself.

var Bag = require('baggy');
var bag = new Bag();

bag.use({
  getOne: function (done) {
    done(null, 1);
  },

  getTwoFromOne: function (one, done) {
    done(null, one + one);
  },

  getThreeFromOneAndTwo: function (one, two, done) {
    done(null, one + two);
  }
});

bag.resolve('Three', function (error, three) {
  console.log(three); // 3
});

In some cases you will want to resolve a derived type without persisting its dependencies. This is also supported.

var Bag = require('baggy');
var bag = new Bag();

bag.create('Power')
  .from('Base', 'Exponent', function (base, exponent, done) {
    done(null, Math.pow(base, exponent));
  });

bag.given('Base', 2)
  .given('Exponent', 3)
  .resolve('Power', function (error, power) {
    console.log(power); // 8
  });

bag.given('Base', 3)
  .given('Exponent', 2)
  .resolve('Power', function (error, power) {
    console.log(power); // 9
  });

bag.resolve('Base', function (error) {
  console.error(error); // [TypeError: Base]
});

bag.resolve('Exponent', function (error) {
  console.error(error); // [TypeError: Exponent]
});

Pull requests and bug reports are welcome, as always.