docs: function ViewBuilder (meta, denormFn) {
    Definition.call(this, meta);
  
    // used for replay...
    this.workerId = uuid().toString();
  
    meta = meta || {};
  
    if (!denormFn || (!_.isFunction(denormFn) && !_.isString(denormFn))) {
      var err = new Error('denormalizer function not injected!');
      debug(err);
      throw err;
    }
  
    if (_.isString(denormFn) && denormFn !== 'update' && denormFn !== 'create' && denormFn !== 'delete') {
      var err = new Error('denormalizer function "' + denormFn + '" not available! Use "create", "update" or "delete"!');
      debug(err);
      throw err;
    }
  
    this.version = meta.version || 0;
    this.payload = meta.payload === '' ? meta.payload : (meta.payload || null);
    this.aggregate = meta.aggregate || null;
    this.context = meta.context || null;
    this.id = meta.id || null;
    this.query = meta.query || null;
    this.autoCreate = meta.autoCreate === undefined || meta.autoCreate === null ? true : meta.autoCreate;
    this.priority = meta.priority || Infinity;
  
    if (_.isString(denormFn)) {
      if (denormFn === 'delete') {
        denormFn = function (evtData, vm) {
          vm.destroy();
        };
      } else {
        denormFn = function (evtData, vm) {
          vm.set(evtData);
        };
      }
    }
  
    this.denormFn = denormFn;
  
    if (denormFn.length === 2) {
      this.denormFn = function (evtData, vm, clb) {
        denormFn.call(this, evtData, vm);
        if (this.retryCalled) {
          return;
        }
        clb(null);
      };
    }
  
    var unwrappedDenormFn = this.denormFn;
  
    this.denormFn = function (evtData, vm, clb) {
      var wrappedCallback = function () {
        try {
          clb.apply(this, _.toArray(arguments));
        } catch (e) {
          debug(e);
          process.emit('uncaughtException', e);
        }
      };
  
      try {
        unwrappedDenormFn.call(this, evtData, vm, wrappedCallback.bind(this));
      } catch (e) {
        debug(e);
        process.emit('uncaughtException', e);
      }
    };
  
    this.idGenerator(function () {
      return uuid().toString();
    });
  
    this.defineShouldHandle(truthyShouldHandle);
  
    this.defineShouldHandleEvent(truthyShouldHandleEvent);  
  
    this.onAfterCommit(function (evt, vm) {});
  }