From 9533440fb99586cfafc92c6b01bbc09549d14a53 Mon Sep 17 00:00:00 2001
From: Bart Jaskulski <bjaskulski@protonmail.com>
Date: Fri, 27 Sep 2024 12:07:14 +0200
Subject: [PATCH] feat: add ordered loader with priority option

Signed-off-by: Bart Jaskulski <bjaskulski@protonmail.com>
---
 src/Binding/Loader/OrderedBindingLoader.php | 27 +++++++++++++++++++++
 1 file changed, 27 insertions(+)
 create mode 100644 src/Binding/Loader/OrderedBindingLoader.php

diff --git a/src/Binding/Loader/OrderedBindingLoader.php b/src/Binding/Loader/OrderedBindingLoader.php
new file mode 100644
index 0000000..6ec899a
--- /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 );
+	}
+}
-- 
GitLab