Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
27 / 27
100.00% covered (success)
100.00%
4 / 4
CRAP
100.00% covered (success)
100.00%
1 / 1
HydeServiceProvider
100.00% covered (success)
100.00%
27 / 27
100.00% covered (success)
100.00%
4 / 4
7
100.00% covered (success)
100.00%
1 / 1
 register
100.00% covered (success)
100.00%
12 / 12
100.00% covered (success)
100.00%
1 / 1
3
 boot
100.00% covered (success)
100.00%
11 / 11
100.00% covered (success)
100.00%
1 / 1
2
 discoverBladeViewsIn
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
1
 storeCompiledSiteIn
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3namespace Hyde\Framework;
4
5use Composer\InstalledVersions;
6use Hyde\Framework\Actions\CreatesDefaultDirectories;
7use Hyde\Framework\Concerns\RegistersDefaultDirectories;
8use Hyde\Framework\Contracts\AssetServiceContract;
9use Hyde\Framework\Models\BladePage;
10use Hyde\Framework\Models\DocumentationPage;
11use Hyde\Framework\Models\MarkdownPage;
12use Hyde\Framework\Models\MarkdownPost;
13use Hyde\Framework\Services\AssetService;
14use Illuminate\Support\ServiceProvider;
15
16/**
17 * Register and bootstrap Hyde application services.
18 */
19class HydeServiceProvider extends ServiceProvider
20{
21    use RegistersDefaultDirectories;
22
23    /**
24     * Register any application services.
25     *
26     * @return void
27     */
28    public function register(): void
29    {
30        /**
31         * @deprecated
32         */
33        $this->app->bind(
34            'hyde.version',
35            function () {
36                return InstalledVersions::getPrettyVersion('hyde/hyde') ?: 'unreleased';
37            }
38        );
39
40        /**
41         * @deprecated
42         */
43        $this->app->bind(
44            'framework.version',
45            function () {
46                return InstalledVersions::getPrettyVersion('hyde/framework') ?: 'unreleased';
47            }
48        );
49
50        $this->app->singleton(AssetServiceContract::class, AssetService::class);
51
52        $this->registerDefaultDirectories([
53            BladePage::class => '_pages',
54            MarkdownPage::class => '_pages',
55            MarkdownPost::class => '_posts',
56            DocumentationPage::class => '_docs',
57        ]);
58
59        $this->discoverBladeViewsIn('_pages');
60
61        $this->storeCompiledSiteIn(config(
62            'hyde.site_output_path', Hyde::path('_site')
63        ));
64
65        $this->commands([
66            Commands\HydePublishHomepageCommand::class,
67            Commands\HydeUpdateConfigsCommand::class,
68            Commands\HydePublishViewsCommand::class,
69            Commands\HydeRebuildStaticSiteCommand::class,
70            Commands\HydeBuildStaticSiteCommand::class,
71            Commands\HydeBuildSitemapCommand::class,
72            Commands\HydeBuildRssFeedCommand::class,
73            Commands\HydeBuildSearchCommand::class,
74            Commands\HydeMakePostCommand::class,
75            Commands\HydeMakePageCommand::class,
76            Commands\HydeValidateCommand::class,
77            Commands\HydeInstallCommand::class,
78            Commands\HydeDebugCommand::class,
79            Commands\HydeServeCommand::class,
80        ]);
81    }
82
83    /**
84     * Bootstrap any application services.
85     *
86     * @return void
87     */
88    public function boot(): void
89    {
90        if (config('hyde.create_default_directories', true)) {
91            (new CreatesDefaultDirectories)->__invoke();
92        }
93
94        $this->loadViewsFrom(__DIR__.'/../resources/views', 'hyde');
95
96        $this->publishes([
97            __DIR__.'/../config' => config_path(),
98        ], 'configs');
99
100        $this->publishes([
101            __DIR__.'/../resources/views/layouts' => resource_path('views/vendor/hyde/layouts'),
102        ], 'hyde-layouts');
103
104        $this->publishes([
105            __DIR__.'/../resources/views/components' => resource_path('views/vendor/hyde/components'),
106        ], 'hyde-components');
107
108        $this->publishes([
109            __DIR__.'/../_pages/404.blade.php' => resource_path('views/pages/404.blade.php'),
110        ], 'hyde-page-404');
111    }
112
113    /**
114     * If you are loading Blade views from a different directory,
115     * you need to add the path to the view.php config. This is
116     * here done automatically when registering this provider.
117     */
118    protected function discoverBladeViewsIn(string $directory): void
119    {
120        config(['view.paths' => array_merge(
121            config('view.paths', []),
122            [base_path($directory)]
123        )]);
124    }
125
126    /**
127     * The absolute path to the directory when the compiled site is stored.
128     */
129    protected function storeCompiledSiteIn(string $directory): void
130    {
131        StaticPageBuilder::$outputPath = $directory;
132    }
133}