docs: function Saga (meta, fn) {
    Definition.call(this, meta);
  
    meta = meta || {};
  
    if (!fn || !_.isFunction(fn)) {
      var err = new Error('Saga function not injected!');
      debug(err);
      throw err;
    }
  
    this.aggregate = meta.aggregate || null;
    this.context = meta.context || null;
    this.existing = meta.existing || false;
    this.version = meta.version || 0;
    this.payload = meta.payload || '';
    this.id = meta.id || null;
    this.containingProperties = meta.containingProperties || [];
    this.priority = meta.priority || Infinity;
  
    this.sagaFn = function (evt, saga, clb) {
      var wrappedCallback = function () {
        try {
          clb.apply(this, _.toArray(arguments));
        } catch (e) {
          debug(e);
          process.emit('uncaughtException', e);
        }
      };
  
      try {
        fn.call(this, evt, saga, wrappedCallback);
      } catch (e) {
        debug(e);
        process.emit('uncaughtException', e);
      }
    };
  
    this.idGenerator(function () {
      return uuid().toString();
    });
  
    this.defineShouldHandle(function (evt, saga) {
      return true;
    });  
  
    this.defineShouldHandleEvent(function (evt) {
      return true;
    });  
  }