addHooks method

void addHooks(
  1. Angel app
)

Adds hooks to this instance.

Implementation

void addHooks(Angel app) {
  var hooks = getAnnotation<Hooks>(inner, app.container!.reflector);
  var before = <HookedServiceEventListener<Id, Data, T>>[];
  var after = <HookedServiceEventListener<Id, Data, T>>[];

  if (hooks != null) {
    before.addAll(hooks.before.cast());
    after.addAll(hooks.after.cast());
  }

  void applyListeners(
      Function fn, HookedServiceEventDispatcher<Id, Data, T> dispatcher,
      [bool? isAfter]) {
    var hooks = getAnnotation<Hooks>(fn, app.container!.reflector);
    final listeners = <HookedServiceEventListener<Id, Data, T>>[
      ...isAfter == true ? after : before
    ];

    if (hooks != null) {
      listeners.addAll((isAfter == true ? hooks.after : hooks.before).cast());
    }

    listeners.forEach(dispatcher.listen);
  }

  applyListeners(inner.index, beforeIndexed);
  applyListeners(inner.read, beforeRead);
  applyListeners(inner.create, beforeCreated);
  applyListeners(inner.modify, beforeModified);
  applyListeners(inner.update, beforeUpdated);
  applyListeners(inner.remove, beforeRemoved);
  applyListeners(inner.index, afterIndexed, true);
  applyListeners(inner.read, afterRead, true);
  applyListeners(inner.create, afterCreated, true);
  applyListeners(inner.modify, afterModified, true);
  applyListeners(inner.update, afterUpdated, true);
  applyListeners(inner.remove, afterRemoved, true);
}