dist/object.js
function flush() {
  var f = void 0;

  while (f = delayPreFlushCallbacks.shift()) {
    f();
  }

  propagateChanges();

  var curChangedObjects = changedObjects;
  changedObjects = {};
  flushTimer = null;

  for (var id in curChangedObjects) {
    var _curChangedObjects$id = curChangedObjects[id],
        object = _curChangedObjects$id.object,
        props = _curChangedObjects$id.props;

    var star = false;

    for (var k in props) {
      if (k.indexOf('.') === -1) {
        star = true;
      }
      object.notify(
      // strip '@' suffix if present
      k.length > 1 && k.endsWith('@') && !k.endsWith('.@') ? k.slice(0, k.length - 1) : k);
    }

    if (star) {
      object.notify('*');
    }
  }

  while (f = delayPostFlushCallbacks.shift()) {
    f();
  }
}
function flush() {
  var f = void 0;

  while (f = delayPreFlushCallbacks.shift()) {
    f();
  }

  propagateChanges();

  var curChangedObjects = changedObjects;
  changedObjects = {};
  flushTimer = null;

  for (var id in curChangedObjects) {
    var _curChangedObjects$id = curChangedObjects[id],
        object = _curChangedObjects$id.object,
        props = _curChangedObjects$id.props;

    var star = false;

    for (var k in props) {
      if (k.indexOf('.') === -1) {
        star = true;
      }
      object.notify(
      // strip '@' suffix if present
      k.length > 1 && k.endsWith('@') && !k.endsWith('.@') ? k.slice(0, k.length - 1) : k);
    }

    if (star) {
      object.notify('*');
    }
  }

  while (f = delayPostFlushCallbacks.shift()) {
    f();
  }
}
Internal: Flushes the current change queue. This notifies observers of the changed props as well as observers of any props that depend on the changed props. Observers are only invoked once per flush, regardless of how many of their dependent props have changed. Additionaly, cached values are cleared where appropriate.