EntityResolutionRules.fetchTypes constructor

EntityResolutionRules.fetchTypes({
  1. bool? allEager,
  2. bool? allLazy,
  3. Map<Object, bool?>? eagerTypes,
  4. Map<Object, bool?>? lazyTypes,
  5. bool mergeTolerant = false,
})

Implementation

factory EntityResolutionRules.fetchTypes(
    {bool? allEager,
    bool? allLazy,
    Map<Object, bool?>? eagerTypes,
    Map<Object, bool?>? lazyTypes,
    bool mergeTolerant = false}) {
  var eagerTypesNotNull = eagerTypes?.entries.map((e) {
    var eager = e.value;
    return eager != null ? MapEntry(e.key, eager) : null;
  }).whereNotNull();

  var lazyTypesNotNull = lazyTypes?.entries.map((e) {
    var lazy = e.value;
    return lazy != null ? MapEntry(e.key, lazy) : null;
  }).whereNotNull();

  var fetchEager = eagerTypesNotNull?.map((e) {
    var t = e.key;
    var eager = e.value;
    return eager ? t : null;
  });

  var fetchNotEager = eagerTypesNotNull?.map((e) {
    var t = e.key;
    var eager = e.value;
    return !eager ? t : null;
  });

  var fetchLazy = lazyTypesNotNull?.map((e) {
    var t = e.key;
    var lazy = e.value;
    return lazy ? t : null;
  });

  var fetchNotLazy = lazyTypesNotNull?.map((e) {
    var t = e.key;
    var lazy = e.value;
    return !lazy ? t : null;
  });

  var eagerEntityTypes = [
    ...?fetchEager,
    ...?fetchNotLazy,
  ]
      .whereNotNull()
      .expand((e) => e is Iterable ? e : [e])
      .whereType<Type>()
      .toList();

  var lazyEntityTypes = [
    ...?fetchLazy,
    ...?fetchNotEager,
  ]
      .whereNotNull()
      .expand((e) => e is Iterable ? e : [e])
      .whereType<Type>()
      .toList();

  if (allEager != null && allEager) {
    return lazyEntityTypes.isNotEmpty
        ? EntityResolutionRules(
            allEager: true,
            lazyEntityTypes: lazyEntityTypes,
            mergeTolerant: mergeTolerant,
          )
        : EntityResolutionRules.fetchEagerAll(
            mergeTolerant: mergeTolerant,
          );
  } else if (allLazy != null && allLazy) {
    return eagerEntityTypes.isNotEmpty
        ? EntityResolutionRules(
            allLazy: true,
            eagerEntityTypes: eagerEntityTypes,
            mergeTolerant: mergeTolerant,
          )
        : EntityResolutionRules.fetchLazyAll(
            mergeTolerant: mergeTolerant,
          );
  }

  return EntityResolutionRules(
    eagerEntityTypes: eagerEntityTypes,
    lazyEntityTypes: lazyEntityTypes,
    mergeTolerant: mergeTolerant,
  );
}