From a05e8a564009ae7354f0b1ede5a69ed6d3c6e650 Mon Sep 17 00:00:00 2001 From: winter Date: Wed, 26 Mar 2025 21:59:44 +0000 Subject: add plugin support --- Digitigrade/PluginLoader.php | 46 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 Digitigrade/PluginLoader.php (limited to 'Digitigrade/PluginLoader.php') diff --git a/Digitigrade/PluginLoader.php b/Digitigrade/PluginLoader.php new file mode 100644 index 0000000..094f1b6 --- /dev/null +++ b/Digitigrade/PluginLoader.php @@ -0,0 +1,46 @@ +warning("$path doesn't appear to be a valid phar file!"); + } + $metadata = $phar->getMetadata(); + if (!($metadata instanceof PluginMetadata)) { + Logger::getInstance()->warning("$path doesn't appear to be a valid plugin!"); + return false; + } + self::$loadedPlugins[$path] = $metadata; + + // setup autoloads + spl_autoload_register(function (string $className) use ($path, $metadata, $phar) { + /** @var PluginMetadata $metadata */ + /** @var \Phar $phar */ + if (str_starts_with($className, $metadata->autoloadPrefix)) { + require "phar://$path/" + . $metadata->autoloadDir + . str_replace('\\', '/', + substr_replace($className, '', 0, strlen($metadata->autoloadPrefix))) + . '.php'; + } + }); + + // run entrypoint if defined + if (isset($metadata->entrypoint)) { + require "phar://$path/$metadata->entrypoint"; + } + + return true; + } + + public static function loadDir(string $directory) { + foreach (glob("$directory/*.phar") as $file) { + self::load($file); + } + } +} \ No newline at end of file -- cgit v1.3