composite function

Invoker composite(
  1. Invoker invoker,
  2. String pattern
)

Composite the filter spi providers as a invoker. invoker Delegate invoker. filters Filter list.

Implementation

Invoker composite(Invoker invoker, String pattern) {
  final defs = <Defi<SPI>>[];
  for (final defi in ark.export<SPI>()) {
    if (defi.dft is! Filter) {
      continue;
    }
    final meta = defi.m;
    final name = meta.name ?? '';
    final targetPattern = meta.pattern ?? '';
    if (name == pattern) {
      continue;
    }
    if (targetPattern.isNotEmpty && targetPattern != pattern) {
      continue;
    }
    defs.add(defi);
  }
  defs.sort((left, right) {
    final priority = (right.m.priority ?? 0).compareTo(left.m.priority ?? 0);
    if (priority != 0) {
      return priority;
    }
    return (left.m.name ?? '').compareTo(right.m.name ?? '');
  });
  return _composite(
    invoker,
    defs.map((defi) => defi.dft as Filter).toList(growable: false),
  );
}