1: <?php
2:
3: namespace LaravelUi5\Core\Services;
4:
5: use LaravelUi5\Core\Attributes\Setting;
6: use LaravelUi5\Core\Contracts\SettingResolverInterface;
7: use LaravelUi5\Core\Contracts\Ui5Config;
8: use LaravelUi5\Core\Contracts\Ui5Context;
9: use LaravelUi5\Core\Exceptions\MissingDefaultValueException;
10: use LaravelUi5\Core\Ui5\Contracts\ConfigurableInterface;
11: use ReflectionClass;
12:
13: readonly class SettingResolver implements SettingResolverInterface
14: {
15: public function resolve(ConfigurableInterface $target, ?Ui5Context $ctx = null): Ui5Config
16: {
17: $reflection = new ReflectionClass($target);
18: $settings = $reflection->getAttributes(Setting::class);
19:
20: $out = [];
21: foreach ($settings as $s) {
22: $setting = $s->newInstance();
23: if (null === $setting->default) {
24: throw new MissingDefaultValueException($setting->key);
25: }
26: $out[$setting->key] = $setting->default;
27: }
28:
29: return new Ui5Config($out);
30: }
31: }
32: