From 079af378eda8289b52210aa774e2ba9b7f999442 Mon Sep 17 00:00:00 2001
From: Bart Jaskulski <bjaskulski@protonmail.com>
Date: Fri, 27 Sep 2024 13:34:33 +0200
Subject: [PATCH] feat: add debug lodaer with dev notices

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

diff --git a/src/Binding/Loader/DebugBindingLoader.php b/src/Binding/Loader/DebugBindingLoader.php
new file mode 100644
index 0000000..286237d
--- /dev/null
+++ b/src/Binding/Loader/DebugBindingLoader.php
@@ -0,0 +1,37 @@
+<?php
+declare( strict_types=1 );
+
+namespace WPDesk\Init\Binding\Loader;
+
+use Psr\Log\LoggerInterface;
+use WPDesk\Init\Binding\Definition\UnknownDefinition;
+use WPDesk\Init\Binding\Hookable;
+use WPDesk\Init\Plugin\Plugin;
+
+/**
+ * Add some PHP notices at dev environment, when a definition is unrecognized.
+ */
+final class DebugBindingLoader implements BindingDefinitions {
+
+	private BindingDefinitions $loader;
+
+	public function __construct( BindingDefinitions $loader ) {
+		$this->loader = $loader;
+	}
+
+	public function load(): iterable {
+		foreach ( $this->loader->load() as $definition ) {
+			if ( $definition instanceof UnknownDefinition ) {
+				@trigger_error(
+					sprintf(
+						'Trying to bind unknown value "%1$s". Currently wp-init can handle only simple callables and classes implementing "%2$s" interface',
+						is_string( $definition->value() ) ? $definition->value() : json_encode( $definition->value() ),
+						Hookable::class
+					),
+					\E_USER_NOTICE
+				);
+			}
+			yield $definition;
+		}
+	}
+}
-- 
GitLab