composite function
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),
);
}