diff --git a/src/Binding/Loader/OrderedBindingLoader.php b/src/Binding/Loader/OrderedBindingLoader.php new file mode 100644 index 0000000000000000000000000000000000000000..6ec899af63ae090ca8cd58d1df0c9a8214c04b18 --- /dev/null +++ b/src/Binding/Loader/OrderedBindingLoader.php @@ -0,0 +1,27 @@ +<?php +declare( strict_types=1 ); + +namespace WPDesk\Init\Binding\Loader; + +final class OrderedBindingLoader implements BindingDefinitions { + + private BindingDefinitions $loader; + + public function __construct( BindingDefinitions $loader ) { + $this->loader = $loader; + } + + public function load(): iterable { + $definitions = []; + foreach ( $this->loader->load() as $def ) { + $definitions[] = $def; + } + + usort( + $definitions, + fn ( $a, $b ) => $a->option( 'priority' ) <=> $b->option( 'priority' ) + ); + + yield from array_reverse( $definitions, false ); + } +}