]> BookStack Code Mirror - bookstack/commitdiff
Merge pull request #4921 from BookStackApp/v24-02
authorDan Brown <redacted>
Fri, 5 Apr 2024 14:21:05 +0000 (15:21 +0100)
committerGitHub <redacted>
Fri, 5 Apr 2024 14:21:05 +0000 (15:21 +0100)
v23.02.3 changes

132 files changed:
.github/workflows/analyse-php.yml
.github/workflows/test-migrations.yml
.github/workflows/test-php.yml
LICENSE
app/Access/Controllers/MfaTotpController.php
app/Access/Mfa/TotpValidationRule.php
app/App/HomeController.php
app/App/MetaController.php [new file with mode: 0644]
app/App/Providers/AppServiceProvider.php
app/App/Providers/AuthServiceProvider.php
app/App/Providers/EventServiceProvider.php
app/App/Providers/RouteServiceProvider.php
app/App/Providers/ThemeServiceProvider.php
app/App/Providers/TranslationServiceProvider.php
app/App/Providers/ViewTweaksServiceProvider.php
app/Config/app.php
app/Config/cache.php
app/Config/hashing.php
app/Config/logging.php
app/Config/queue.php
app/Config/session.php
app/Http/Kernel.php
app/Http/Middleware/RedirectIfAuthenticated.php
app/Http/Middleware/ThrottleApiRequests.php
app/Http/Middleware/TrustHosts.php
app/Translation/FileLoader.php
app/Uploads/ImageResizer.php
composer.json
composer.lock
database/migrations/2014_10_12_000000_create_users_table.php
database/migrations/2014_10_12_100000_create_password_resets_table.php
database/migrations/2015_07_12_114933_create_books_table.php
database/migrations/2015_07_12_190027_create_pages_table.php
database/migrations/2015_07_13_172121_create_images_table.php
database/migrations/2015_07_27_172342_create_chapters_table.php
database/migrations/2015_08_08_200447_add_users_to_entities.php
database/migrations/2015_08_09_093534_create_page_revisions_table.php
database/migrations/2015_08_16_142133_create_activities_table.php
database/migrations/2015_08_29_105422_add_roles_and_permissions.php
database/migrations/2015_08_30_125859_create_settings_table.php
database/migrations/2015_08_31_175240_add_search_indexes.php
database/migrations/2015_09_04_165821_create_social_accounts_table.php
database/migrations/2015_09_05_164707_add_email_confirmation_table.php
database/migrations/2015_11_21_145609_create_views_table.php
database/migrations/2015_11_26_221857_add_entity_indexes.php
database/migrations/2015_12_05_145049_fulltext_weighting.php
database/migrations/2015_12_07_195238_add_image_upload_types.php
database/migrations/2015_12_09_195748_add_user_avatars.php
database/migrations/2016_01_11_210908_add_external_auth_to_users.php
database/migrations/2016_02_25_184030_add_slug_to_revisions.php
database/migrations/2016_02_27_120329_update_permissions_and_roles.php
database/migrations/2016_02_28_084200_add_entity_access_controls.php
database/migrations/2016_03_09_203143_add_page_revision_types.php
database/migrations/2016_03_13_082138_add_page_drafts.php
database/migrations/2016_03_25_123157_add_markdown_support.php
database/migrations/2016_04_09_100730_add_view_permissions_to_roles.php
database/migrations/2016_04_20_192649_create_joint_permissions_table.php
database/migrations/2016_05_06_185215_create_tags_table.php
database/migrations/2016_07_07_181521_add_summary_to_page_revisions.php
database/migrations/2016_09_29_101449_remove_hidden_roles.php
database/migrations/2016_10_09_142037_create_attachments_table.php
database/migrations/2017_01_21_163556_create_cache_table.php
database/migrations/2017_01_21_163602_create_sessions_table.php
database/migrations/2017_03_19_091553_create_search_index_table.php
database/migrations/2017_04_20_185112_add_revision_counts.php
database/migrations/2017_07_02_152834_update_db_encoding_to_ut8mb4.php
database/migrations/2017_08_01_130541_create_comments_table.php
database/migrations/2017_08_29_102650_add_cover_image_display.php
database/migrations/2018_07_15_173514_add_role_external_auth_id.php
database/migrations/2018_08_04_115700_create_bookshelves_table.php
database/migrations/2019_07_07_112515_add_template_support.php
database/migrations/2019_08_17_140214_add_user_invites_table.php
database/migrations/2019_12_29_120917_add_api_auth.php
database/migrations/2020_08_04_111754_drop_joint_permissions_id.php
database/migrations/2020_08_04_131052_remove_role_name_field.php
database/migrations/2020_09_19_094251_add_activity_indexes.php
database/migrations/2020_09_27_210059_add_entity_soft_deletes.php
database/migrations/2020_09_27_210528_create_deletions_table.php
database/migrations/2020_11_07_232321_simplify_activities_table.php
database/migrations/2020_12_30_173528_add_owned_by_field_to_entities.php
database/migrations/2021_01_30_225441_add_settings_type_column.php
database/migrations/2021_03_08_215138_add_user_slug.php
database/migrations/2021_05_15_173110_create_favourites_table.php
database/migrations/2021_06_30_173111_create_mfa_values_table.php
database/migrations/2021_07_03_085038_add_mfa_enforced_to_roles_table.php
database/migrations/2021_08_28_161743_add_export_role_permission.php
database/migrations/2021_09_26_044614_add_activities_ip_column.php
database/migrations/2021_11_26_070438_add_index_for_user_ip.php
database/migrations/2021_12_07_111343_create_webhooks_table.php
database/migrations/2021_12_13_152024_create_jobs_table.php
database/migrations/2021_12_13_152120_create_failed_jobs_table.php
database/migrations/2022_01_03_154041_add_webhooks_timeout_error_columns.php
database/migrations/2022_04_17_101741_add_editor_change_field_and_permission.php
database/migrations/2022_04_25_140741_update_polymorphic_types.php
database/migrations/2022_07_16_170051_drop_joint_permission_type.php
database/migrations/2022_08_17_092941_create_references_table.php
database/migrations/2022_09_02_082910_fix_shelf_cover_image_types.php
database/migrations/2022_10_07_091406_flatten_entity_permissions_table.php
database/migrations/2022_10_08_104202_drop_entity_restricted_field.php
database/migrations/2023_01_24_104625_refactor_joint_permissions_storage.php
database/migrations/2023_01_28_141230_copy_color_settings_for_dark_mode.php
database/migrations/2023_02_20_093655_increase_attachments_path_length.php
database/migrations/2023_02_23_200227_add_updated_at_index_to_pages.php
database/migrations/2023_06_10_071823_remove_guest_user_secondary_roles.php
database/migrations/2023_06_25_181952_remove_bookshelf_create_entity_permissions.php
database/migrations/2023_07_25_124945_add_receive_notifications_role_permissions.php
database/migrations/2023_07_31_104430_create_watches_table.php
database/migrations/2023_08_21_174248_increase_cache_size.php
database/migrations/2023_12_02_104541_add_default_template_to_books.php
database/migrations/2023_12_17_140913_add_description_html_to_entities.php
database/migrations/2024_01_01_104542_add_default_template_to_chapters.php
database/migrations/2024_02_04_141358_add_views_updated_index.php
dev/build/esbuild.js
dev/docker/Dockerfile
dev/licensing/gen-js-licenses [new file with mode: 0644]
dev/licensing/gen-licenses-shared.php [new file with mode: 0644]
dev/licensing/gen-php-licenses [new file with mode: 0644]
dev/licensing/js-library-licenses.txt [new file with mode: 0644]
dev/licensing/php-library-licenses.txt [new file with mode: 0644]
lang/en/settings.php
phpstan.neon.dist
phpunit.xml
readme.md
resources/views/help/licenses.blade.php [new file with mode: 0644]
resources/views/settings/layout.blade.php
routes/web.php
tests/Auth/OidcTest.php
tests/Auth/ResetPasswordTest.php
tests/CreatesApplication.php
tests/LicensesTest.php [new file with mode: 0644]
tests/Unit/ConfigTest.php
version

index 4ddf519328c90d9913435f5700361ffc96f98305..dbeaf94724a55da28fab74019fc673e0b7c94d12 100644 (file)
@@ -18,7 +18,7 @@ jobs:
     - name: Setup PHP
       uses: shivammathur/setup-php@v2
       with:
-        php-version: 8.1
+        php-version: 8.3
         extensions: gd, mbstring, json, curl, xml, mysql, ldap
 
     - name: Get Composer Cache Directory
@@ -27,10 +27,10 @@ jobs:
         echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
 
     - name: Cache composer packages
-      uses: actions/cache@v3
+      uses: actions/cache@v4
       with:
         path: ${{ steps.composer-cache.outputs.dir }}
-        key: ${{ runner.os }}-composer-8.1
+        key: ${{ runner.os }}-composer-8.3
         restore-keys: ${{ runner.os }}-composer-
 
     - name: Install composer dependencies
index 63f52a295063ddc379bec20bd50722b94afff489..10cfbe1720414876191eeca2597493b3bf4b09a2 100644 (file)
@@ -16,7 +16,7 @@ jobs:
     runs-on: ubuntu-22.04
     strategy:
       matrix:
-        php: ['8.0', '8.1', '8.2', '8.3']
+        php: ['8.1', '8.2', '8.3']
     steps:
       - uses: actions/checkout@v1
 
@@ -32,7 +32,7 @@ jobs:
           echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
 
       - name: Cache composer packages
-        uses: actions/cache@v3
+        uses: actions/cache@v4
         with:
           path: ${{ steps.composer-cache.outputs.dir }}
           key: ${{ runner.os }}-composer-${{ matrix.php }}
index 89ebf0deceb411298cc3a9156689136126e264c9..269f326320a4f39ef338a4103817a1e9e808205a 100644 (file)
@@ -16,7 +16,7 @@ jobs:
     runs-on: ubuntu-22.04
     strategy:
       matrix:
-        php: ['8.0', '8.1', '8.2', '8.3']
+        php: ['8.1', '8.2', '8.3']
     steps:
     - uses: actions/checkout@v1
 
@@ -32,7 +32,7 @@ jobs:
         echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
 
     - name: Cache composer packages
-      uses: actions/cache@v3
+      uses: actions/cache@v4
       with:
         path: ${{ steps.composer-cache.outputs.dir }}
         key: ${{ runner.os }}-composer-${{ matrix.php }}
diff --git a/LICENSE b/LICENSE
index 7727542f4aebe0e06e69f62e09e098a9f409c8d8..5ed2edf858522fa8e5c635c112f35fedc5af7605 100644 (file)
--- a/LICENSE
+++ b/LICENSE
@@ -1,6 +1,6 @@
 The MIT License (MIT)
 
-Copyright (c) 2015-2023, Dan Brown and the BookStack Project contributors.
+Copyright (c) 2015-2024, Dan Brown and the BookStack Project contributors.
 
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
index f60644b84cc043b4445cd9339ec5738b2106de27..5202fedc04f925c09c36a0d1e1720ea7c4b4158d 100644 (file)
@@ -19,20 +19,25 @@ class MfaTotpController extends Controller
 
     protected const SETUP_SECRET_SESSION_KEY = 'mfa-setup-totp-secret';
 
+    public function __construct(
+        protected TotpService $totp
+    ) {
+    }
+
     /**
      * Show a view that generates and displays a TOTP QR code.
      */
-    public function generate(TotpService $totp)
+    public function generate()
     {
         if (session()->has(static::SETUP_SECRET_SESSION_KEY)) {
             $totpSecret = decrypt(session()->get(static::SETUP_SECRET_SESSION_KEY));
         } else {
-            $totpSecret = $totp->generateSecret();
+            $totpSecret = $this->totp->generateSecret();
             session()->put(static::SETUP_SECRET_SESSION_KEY, encrypt($totpSecret));
         }
 
-        $qrCodeUrl = $totp->generateUrl($totpSecret, $this->currentOrLastAttemptedUser());
-        $svg = $totp->generateQrCodeSvg($qrCodeUrl);
+        $qrCodeUrl = $this->totp->generateUrl($totpSecret, $this->currentOrLastAttemptedUser());
+        $svg = $this->totp->generateQrCodeSvg($qrCodeUrl);
 
         $this->setPageTitle(trans('auth.mfa_gen_totp_title'));
 
@@ -56,7 +61,7 @@ class MfaTotpController extends Controller
             'code' => [
                 'required',
                 'max:12', 'min:4',
-                new TotpValidationRule($totpSecret),
+                new TotpValidationRule($totpSecret, $this->totp),
             ],
         ]);
 
@@ -87,7 +92,7 @@ class MfaTotpController extends Controller
             'code' => [
                 'required',
                 'max:12', 'min:4',
-                new TotpValidationRule($totpSecret),
+                new TotpValidationRule($totpSecret, $this->totp),
             ],
         ]);
 
index c38bde90b75dc6249d3ec093602d9c721e4377ba..63b575f198b80c16e0f7119f2f22c5a31d357bf3 100644 (file)
@@ -2,36 +2,26 @@
 
 namespace BookStack\Access\Mfa;
 
-use Illuminate\Contracts\Validation\Rule;
+use Closure;
+use Illuminate\Contracts\Validation\ValidationRule;
 
-class TotpValidationRule implements Rule
+class TotpValidationRule implements ValidationRule
 {
-    protected $secret;
-    protected $totpService;
-
     /**
      * Create a new rule instance.
      * Takes the TOTP secret that must be system provided, not user provided.
      */
-    public function __construct(string $secret)
-    {
-        $this->secret = $secret;
-        $this->totpService = app()->make(TotpService::class);
+    public function __construct(
+        protected string $secret,
+        protected TotpService $totpService,
+    ) {
     }
 
-    /**
-     * Determine if the validation rule passes.
-     */
-    public function passes($attribute, $value)
-    {
-        return $this->totpService->verifyCode($value, $this->secret);
-    }
-
-    /**
-     * Get the validation error message.
-     */
-    public function message()
+    public function validate(string $attribute, mixed $value, Closure $fail): void
     {
-        return trans('validation.totp');
+        $passes = $this->totpService->verifyCode($value, $this->secret);
+        if (!$passes) {
+            $fail(trans('validation.totp'));
+        }
     }
 }
index 116f5c8a4bce024a3ba531fdfe5b9241628f9c66..0585e0af5cc33b97657543f19084f599f2c86446 100644 (file)
@@ -9,7 +9,6 @@ use BookStack\Entities\Queries\QueryRecentlyViewed;
 use BookStack\Entities\Queries\QueryTopFavourites;
 use BookStack\Entities\Tools\PageContent;
 use BookStack\Http\Controller;
-use BookStack\Uploads\FaviconHandler;
 use BookStack\Util\SimpleListOptions;
 use Illuminate\Http\Request;
 
@@ -112,48 +111,4 @@ class HomeController extends Controller
 
         return view('home.default', $commonData);
     }
-
-    /**
-     * Show the view for /robots.txt.
-     */
-    public function robots()
-    {
-        $sitePublic = setting('app-public', false);
-        $allowRobots = config('app.allow_robots');
-
-        if ($allowRobots === null) {
-            $allowRobots = $sitePublic;
-        }
-
-        return response()
-            ->view('misc.robots', ['allowRobots' => $allowRobots])
-            ->header('Content-Type', 'text/plain');
-    }
-
-    /**
-     * Show the route for 404 responses.
-     */
-    public function notFound()
-    {
-        return response()->view('errors.404', [], 404);
-    }
-
-    /**
-     * Serve the application favicon.
-     * Ensures a 'favicon.ico' file exists at the web root location (if writable) to be served
-     * directly by the webserver in the future.
-     */
-    public function favicon(FaviconHandler $favicons)
-    {
-        $exists = $favicons->restoreOriginalIfNotExists();
-        return response()->file($exists ? $favicons->getPath() : $favicons->getOriginalPath());
-    }
-
-    /**
-     * Serve a PWA application manifest.
-     */
-    public function pwaManifest(PwaManifestBuilder $manifestBuilder)
-    {
-        return response()->json($manifestBuilder->build());
-    }
 }
diff --git a/app/App/MetaController.php b/app/App/MetaController.php
new file mode 100644 (file)
index 0000000..1515b4f
--- /dev/null
@@ -0,0 +1,67 @@
+<?php
+
+namespace BookStack\App;
+
+use BookStack\Http\Controller;
+use BookStack\Uploads\FaviconHandler;
+
+class MetaController extends Controller
+{
+    /**
+     * Show the view for /robots.txt.
+     */
+    public function robots()
+    {
+        $sitePublic = setting('app-public', false);
+        $allowRobots = config('app.allow_robots');
+
+        if ($allowRobots === null) {
+            $allowRobots = $sitePublic;
+        }
+
+        return response()
+            ->view('misc.robots', ['allowRobots' => $allowRobots])
+            ->header('Content-Type', 'text/plain');
+    }
+
+    /**
+     * Show the route for 404 responses.
+     */
+    public function notFound()
+    {
+        return response()->view('errors.404', [], 404);
+    }
+
+    /**
+     * Serve the application favicon.
+     * Ensures a 'favicon.ico' file exists at the web root location (if writable) to be served
+     * directly by the webserver in the future.
+     */
+    public function favicon(FaviconHandler $favicons)
+    {
+        $exists = $favicons->restoreOriginalIfNotExists();
+        return response()->file($exists ? $favicons->getPath() : $favicons->getOriginalPath());
+    }
+
+    /**
+     * Serve a PWA application manifest.
+     */
+    public function pwaManifest(PwaManifestBuilder $manifestBuilder)
+    {
+        return response()->json($manifestBuilder->build());
+    }
+
+    /**
+     * Show license information for the application.
+     */
+    public function licenses()
+    {
+        $this->setPageTitle(trans('settings.licenses'));
+
+        return view('help.licenses', [
+            'license' => file_get_contents(base_path('LICENSE')),
+            'phpLibData' => file_get_contents(base_path('dev/licensing/php-library-licenses.txt')),
+            'jsLibData' => file_get_contents(base_path('dev/licensing/js-library-licenses.txt')),
+        ]);
+    }
+}
index 0f4dc55dd2fe061ba8a39d749797aa127e09b366..9012a07ebf4791f24f9dd5102e84d74e979c8b4c 100644 (file)
@@ -25,7 +25,7 @@ class AppServiceProvider extends ServiceProvider
      * Custom container bindings to register.
      * @var string[]
      */
-    public $bindings = [
+    public array $bindings = [
         ExceptionRenderer::class => BookStackExceptionHandlerPage::class,
     ];
 
@@ -33,7 +33,7 @@ class AppServiceProvider extends ServiceProvider
      * Custom singleton bindings to register.
      * @var string[]
      */
-    public $singletons = [
+    public array $singletons = [
         'activity' => ActivityLogger::class,
         SettingService::class => SettingService::class,
         SocialDriverManager::class => SocialDriverManager::class,
@@ -41,12 +41,20 @@ class AppServiceProvider extends ServiceProvider
         HttpRequestService::class => HttpRequestService::class,
     ];
 
+    /**
+     * Register any application services.
+     */
+    public function register(): void
+    {
+        $this->app->singleton(PermissionApplicator::class, function ($app) {
+            return new PermissionApplicator(null);
+        });
+    }
+
     /**
      * Bootstrap any application services.
-     *
-     * @return void
      */
-    public function boot()
+    public function boot(): void
     {
         // Set root URL
         $appUrl = config('app.url');
@@ -67,16 +75,4 @@ class AppServiceProvider extends ServiceProvider
             'page'      => Page::class,
         ]);
     }
-
-    /**
-     * Register any application services.
-     *
-     * @return void
-     */
-    public function register()
-    {
-        $this->app->singleton(PermissionApplicator::class, function ($app) {
-            return new PermissionApplicator(null);
-        });
-    }
 }
index 26d1803107d41466a6e7c80cec72c23325fce1c3..23c3390796575c5a4b6af2de18197d2e7072c757 100644 (file)
@@ -18,10 +18,8 @@ class AuthServiceProvider extends ServiceProvider
 {
     /**
      * Bootstrap the application services.
-     *
-     * @return void
      */
-    public function boot()
+    public function boot(): void
     {
         // Password Configuration
         // Changes here must be reflected in ApiDocsGenerate@getValidationAsString.
@@ -58,10 +56,8 @@ class AuthServiceProvider extends ServiceProvider
 
     /**
      * Register the application services.
-     *
-     * @return void
      */
-    public function register()
+    public function register(): void
     {
         Auth::provider('external-users', function ($app, array $config) {
             return new ExternalBaseUserProvider($config['model']);
index 4ec9facdfd7b82c793f3a57257327e604f009f85..4cd527ba4a40a91e0b7458aa36bcc56aad6d9b3c 100644 (file)
@@ -29,20 +29,16 @@ class EventServiceProvider extends ServiceProvider
 
     /**
      * Register any events for your application.
-     *
-     * @return void
      */
-    public function boot()
+    public function boot(): void
     {
         //
     }
 
     /**
      * Determine if events and listeners should be automatically discovered.
-     *
-     * @return bool
      */
-    public function shouldDiscoverEvents()
+    public function shouldDiscoverEvents(): bool
     {
         return false;
     }
index abd5562449b775e16f2574f21e42852bc426f06b..3a155920eb4f681ee313a291a8741e43169d7d81 100644 (file)
@@ -24,10 +24,8 @@ class RouteServiceProvider extends ServiceProvider
 
     /**
      * Define your route model bindings, pattern filters, etc.
-     *
-     * @return void
      */
-    public function boot()
+    public function boot(): void
     {
         $this->configureRateLimiting();
 
@@ -41,10 +39,8 @@ class RouteServiceProvider extends ServiceProvider
      * Define the "web" routes for the application.
      *
      * These routes all receive session state, CSRF protection, etc.
-     *
-     * @return void
      */
-    protected function mapWebRoutes()
+    protected function mapWebRoutes(): void
     {
         Route::group([
             'middleware' => 'web',
@@ -65,10 +61,8 @@ class RouteServiceProvider extends ServiceProvider
      * Define the "api" routes for the application.
      *
      * These routes are typically stateless.
-     *
-     * @return void
      */
-    protected function mapApiRoutes()
+    protected function mapApiRoutes(): void
     {
         Route::group([
             'middleware' => 'api',
@@ -81,10 +75,8 @@ class RouteServiceProvider extends ServiceProvider
 
     /**
      * Configure the rate limiters for the application.
-     *
-     * @return void
      */
-    protected function configureRateLimiting()
+    protected function configureRateLimiting(): void
     {
         RateLimiter::for('api', function (Request $request) {
             return Limit::perMinute(60)->by($request->user()?->id ?: $request->ip());
index 4c657d9123208dca5f7aaae592e3f1cfc152fb32..2cf581d3863eb0445d9369e1fa3fbddfa6085900 100644 (file)
@@ -10,10 +10,8 @@ class ThemeServiceProvider extends ServiceProvider
 {
     /**
      * Register services.
-     *
-     * @return void
      */
-    public function register()
+    public function register(): void
     {
         // Register the ThemeService as a singleton
         $this->app->singleton(ThemeService::class, fn ($app) => new ThemeService());
@@ -21,10 +19,8 @@ class ThemeServiceProvider extends ServiceProvider
 
     /**
      * Bootstrap services.
-     *
-     * @return void
      */
-    public function boot()
+    public function boot(): void
     {
         // Boot up the theme system
         $themeService = $this->app->make(ThemeService::class);
index c1752f38e3efcd2db7b9f256d03f204a9e5b60c7..b838129a6014b318ca4845641afa6ec2fbedf202 100644 (file)
@@ -11,10 +11,8 @@ class TranslationServiceProvider extends BaseProvider
 {
     /**
      * Register the service provider.
-     *
-     * @return void
      */
-    public function register()
+    public function register(): void
     {
         $this->registerLoader();
 
@@ -41,10 +39,8 @@ class TranslationServiceProvider extends BaseProvider
     /**
      * Register the translation line loader.
      * Overrides the default register action from Laravel so a custom loader can be used.
-     *
-     * @return void
      */
-    protected function registerLoader()
+    protected function registerLoader(): void
     {
         $this->app->singleton('translation.loader', function ($app) {
             return new FileLoader($app['files'], $app['path.lang']);
index 10593ac8bf851b47380f9b8064a7ade1b141ddd4..7115dcb51148c22471a802624e5fbcf52cb8f9af 100644 (file)
@@ -12,10 +12,8 @@ class ViewTweaksServiceProvider extends ServiceProvider
 {
     /**
      * Bootstrap services.
-     *
-     * @return void
      */
-    public function boot()
+    public function boot(): void
     {
         // Set paginator to use bootstrap-style pagination
         Paginator::useBootstrap();
index fc913eb8fee4334f25e0946de70a7a9f8b5dba91..dda787f3f99cbc534d392cea1a579eca3ebb86e5 100644 (file)
@@ -9,6 +9,7 @@
  */
 
 use Illuminate\Support\Facades\Facade;
+use Illuminate\Support\ServiceProvider;
 
 return [
 
@@ -113,46 +114,22 @@ return [
     ],
 
     // Application Service Providers
-    'providers' => [
-
-        // Laravel Framework Service Providers...
-        Illuminate\Auth\AuthServiceProvider::class,
-        Illuminate\Broadcasting\BroadcastServiceProvider::class,
-        Illuminate\Bus\BusServiceProvider::class,
-        Illuminate\Cache\CacheServiceProvider::class,
-        Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class,
-        Illuminate\Cookie\CookieServiceProvider::class,
-        Illuminate\Database\DatabaseServiceProvider::class,
-        Illuminate\Encryption\EncryptionServiceProvider::class,
-        Illuminate\Filesystem\FilesystemServiceProvider::class,
-        Illuminate\Foundation\Providers\FoundationServiceProvider::class,
-        Illuminate\Hashing\HashServiceProvider::class,
-        Illuminate\Mail\MailServiceProvider::class,
-        Illuminate\Notifications\NotificationServiceProvider::class,
-        Illuminate\Pagination\PaginationServiceProvider::class,
-        Illuminate\Pipeline\PipelineServiceProvider::class,
-        Illuminate\Queue\QueueServiceProvider::class,
-        Illuminate\Redis\RedisServiceProvider::class,
-        Illuminate\Auth\Passwords\PasswordResetServiceProvider::class,
-        Illuminate\Session\SessionServiceProvider::class,
-        Illuminate\Validation\ValidationServiceProvider::class,
-        Illuminate\View\ViewServiceProvider::class,
-
+    'providers' => ServiceProvider::defaultProviders()->merge([
         // Third party service providers
         Barryvdh\DomPDF\ServiceProvider::class,
         Barryvdh\Snappy\ServiceProvider::class,
         SocialiteProviders\Manager\ServiceProvider::class,
 
         // BookStack custom service providers
-        \BookStack\App\Providers\ThemeServiceProvider::class,
-        \BookStack\App\Providers\AppServiceProvider::class,
-        \BookStack\App\Providers\AuthServiceProvider::class,
-        \BookStack\App\Providers\EventServiceProvider::class,
-        \BookStack\App\Providers\RouteServiceProvider::class,
-        \BookStack\App\Providers\TranslationServiceProvider::class,
-        \BookStack\App\Providers\ValidationRuleServiceProvider::class,
-        \BookStack\App\Providers\ViewTweaksServiceProvider::class,
-    ],
+        BookStack\App\Providers\ThemeServiceProvider::class,
+        BookStack\App\Providers\AppServiceProvider::class,
+        BookStack\App\Providers\AuthServiceProvider::class,
+        BookStack\App\Providers\EventServiceProvider::class,
+        BookStack\App\Providers\RouteServiceProvider::class,
+        BookStack\App\Providers\TranslationServiceProvider::class,
+        BookStack\App\Providers\ValidationRuleServiceProvider::class,
+        BookStack\App\Providers\ViewTweaksServiceProvider::class,
+    ])->toArray(),
 
     // Class Aliases
     // This array of class aliases to be registered on application start.
index d1d47ab16c2e5cc1da072369f0d85d8eb78e2c72..2ba16059a177629788598d3400b35fb6fae863ab 100644 (file)
@@ -53,7 +53,8 @@ return [
 
         'file' => [
             'driver' => 'file',
-            'path'   => storage_path('framework/cache'),
+            'path'   => storage_path('framework/cache/data'),
+            'lock_path' => storage_path('framework/cache/data'),
         ],
 
         'memcached' => [
index 585ee094ccb2858c90c41de587757cb87bfca9b0..91d0db16b9e4a5a868f86434da38f660fc17f0df 100644 (file)
@@ -21,7 +21,8 @@ return [
     // passwords are hashed using the Bcrypt algorithm. This will allow you
     // to control the amount of time it takes to hash the given password.
     'bcrypt' => [
-        'rounds' => env('BCRYPT_ROUNDS', 10),
+        'rounds' => env('BCRYPT_ROUNDS', 12),
+        'verify' => true,
     ],
 
     // Argon Options
index d49cd727d127c464c920c1bcf5175cb302b2feac..f5cbd5ffc013181df0ebe31cd8d610ce9bb6ff48 100644 (file)
@@ -4,6 +4,7 @@ use Monolog\Formatter\LineFormatter;
 use Monolog\Handler\ErrorLogHandler;
 use Monolog\Handler\NullHandler;
 use Monolog\Handler\StreamHandler;
+use Monolog\Processor\PsrLogMessageProcessor;
 
 /**
  * Logging configuration options.
@@ -49,6 +50,7 @@ return [
             'path'   => storage_path('logs/laravel.log'),
             'level'  => 'debug',
             'days'   => 14,
+            'replace_placeholders' => true,
         ],
 
         'daily' => [
@@ -56,6 +58,7 @@ return [
             'path'   => storage_path('logs/laravel.log'),
             'level'  => 'debug',
             'days'   => 7,
+            'replace_placeholders' => true,
         ],
 
         'stderr' => [
@@ -65,16 +68,20 @@ return [
             'with'    => [
                 'stream' => 'php://stderr',
             ],
+            'processors' => [PsrLogMessageProcessor::class],
         ],
 
         'syslog' => [
             'driver' => 'syslog',
             'level'  => 'debug',
+            'facility' => LOG_USER,
+            'replace_placeholders' => true,
         ],
 
         'errorlog' => [
             'driver' => 'errorlog',
             'level'  => 'debug',
+            'replace_placeholders' => true,
         ],
 
         // Custom errorlog implementation that logs out a plain,
@@ -88,6 +95,7 @@ return [
             'formatter_with' => [
                 'format' => '%message%',
             ],
+            'replace_placeholders' => true,
         ],
 
         'null' => [
index a14799f354d87d0f9652afd02c5513b63daf7a3e..795a7932545a315843769ad255dee4eb37d2d842 100644 (file)
@@ -40,6 +40,12 @@ return [
 
     ],
 
+    // Job batching
+    'batching' => [
+        'database' => 'mysql',
+        'table' => 'job_batches',
+    ],
+
     // Failed queue job logging
     'failed' => [
         'driver'   => 'database-uuids',
index a00d758071201903b137d12d27a2581f7e481867..f2ec2509fc80882913d81211d5ce0cecbd0915d9 100644 (file)
@@ -85,4 +85,11 @@ return [
     // do not enable this as other CSRF protection services are in place.
     // Options: lax, strict, none
     'same_site' => 'lax',
+
+
+    // Partitioned Cookies
+    // Setting this value to true will tie the cookie to the top-level site for
+    // a cross-site context. Partitioned cookies are accepted by the browser
+    // when flagged "secure" and the Same-Site attribute is set to "none".
+    'partitioned' => false,
 ];
index d23f56a2cf9c6857784f0487710f59826d01ea67..30714e2ac59ce6b2901a0ff579a0d5aebbd34295 100644 (file)
@@ -45,11 +45,11 @@ class Kernel extends HttpKernel
     ];
 
     /**
-     * The application's route middleware.
+     * The application's middleware aliases.
      *
      * @var array
      */
-    protected $routeMiddleware = [
+    protected $middlewareAliases = [
         'auth'       => \BookStack\Http\Middleware\Authenticate::class,
         'can'        => \BookStack\Http\Middleware\CheckUserHasPermission::class,
         'guest'      => \BookStack\Http\Middleware\RedirectIfAuthenticated::class,
index 069973a95b780cad77070e2b466e141f16db4c78..745f7196df39bd0a7c4bda8ed65b35bf58b96d59 100644 (file)
@@ -6,19 +6,16 @@ use BookStack\App\Providers\RouteServiceProvider;
 use Closure;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Auth;
+use Symfony\Component\HttpFoundation\Response;
 
 class RedirectIfAuthenticated
 {
     /**
      * Handle an incoming request.
      *
-     * @param \Illuminate\Http\Request $request
-     * @param \Closure                 $next
-     * @param string|null              ...$guards
-     *
-     * @return mixed
+     * @param Closure(Request): (Response) $next
      */
-    public function handle(Request $request, Closure $next, ...$guards)
+    public function handle(Request $request, Closure $next, string ...$guards): Response
     {
         $guards = empty($guards) ? [null] : $guards;
 
index c63d0c6033d4b6918a9970a9f495af2f1432430e..cef2d3906ef3915850154110982166a577c7c552 100644 (file)
@@ -9,7 +9,7 @@ class ThrottleApiRequests extends Middleware
     /**
      * Resolve the number of attempts if the user is authenticated or not.
      */
-    protected function resolveMaxAttempts($request, $maxAttempts)
+    protected function resolveMaxAttempts($request, $maxAttempts): int
     {
         return (int) config('api.requests_per_minute');
     }
index 7bd89ee51def992b27c2fd9d1c67b5bc2b9bb343..c13d631fed9c16be0573874755b3c5d7a283a51b 100644 (file)
@@ -9,9 +9,9 @@ class TrustHosts extends Middleware
     /**
      * Get the host patterns that should be trusted.
      *
-     * @return array
+     * @return array<int, string|null>
      */
-    public function hosts()
+    public function hosts(): array
     {
         return [
             $this->allSubdomainsOfApplicationUrl(),
index de1124046183186ffeca53be74b1e3db3399293d..1fec4d18bb1cd6a82d1d2d1811f22a30bb369e07 100644 (file)
@@ -8,16 +8,22 @@ class FileLoader extends BaseLoader
 {
     /**
      * Load the messages for the given locale.
+     *
      * Extends Laravel's translation FileLoader to look in multiple directories
      * so that we can load in translation overrides from the theme file if wanted.
      *
+     * Note: As of using Laravel 10, this may now be redundant since Laravel's
+     * file loader supports multiple paths. This needs further testing though
+     * to confirm if Laravel works how we expect, since we specifically need
+     * the theme folder to be able to partially override core lang files.
+     *
      * @param string      $locale
      * @param string      $group
      * @param string|null $namespace
      *
      * @return array
      */
-    public function load($locale, $group, $namespace = null)
+    public function load($locale, $group, $namespace = null): array
     {
         if ($group === '*' && $namespace === '*') {
             return $this->loadJsonPaths($locale);
@@ -25,8 +31,8 @@ class FileLoader extends BaseLoader
 
         if (is_null($namespace) || $namespace === '*') {
             $themePath = theme_path('lang');
-            $themeTranslations = $themePath ? $this->loadPath($themePath, $locale, $group) : [];
-            $originalTranslations = $this->loadPath($this->path, $locale, $group);
+            $themeTranslations = $themePath ? $this->loadPaths([$themePath], $locale, $group) : [];
+            $originalTranslations = $this->loadPaths($this->paths, $locale, $group);
 
             return array_merge($originalTranslations, $themeTranslations);
         }
index 4dc1b0b9922a5a2e30a0c5c35bc8b0dece27896c..d09177fff5c71966bbaab354ae5dce1e7505fe99 100644 (file)
@@ -6,8 +6,12 @@ use BookStack\Exceptions\ImageUploadException;
 use Exception;
 use GuzzleHttp\Psr7\Utils;
 use Illuminate\Support\Facades\Cache;
-use Intervention\Image\Gd\Driver;
-use Intervention\Image\Image as InterventionImage;
+use Intervention\Image\Decoders\BinaryImageDecoder;
+use Intervention\Image\Drivers\Gd\Driver;
+use Intervention\Image\Encoders\AutoEncoder;
+use Intervention\Image\Encoders\PngEncoder;
+use Intervention\Image\Interfaces\ImageInterface as InterventionImage;
+use Intervention\Image\ImageManager;
 
 class ImageResizer
 {
@@ -124,15 +128,17 @@ class ImageResizer
         $this->orientImageToOriginalExif($thumb, $imageData);
 
         if ($keepRatio) {
-            $thumb->resize($width, $height, function ($constraint) {
-                $constraint->aspectRatio();
-                $constraint->upsize();
-            });
+            $thumb->scaleDown($width, $height);
         } else {
-            $thumb->fit($width, $height);
+            $thumb->cover($width, $height);
         }
 
-        $thumbData = (string) $thumb->encode($format);
+        $encoder = match ($format) {
+            'png' => new PngEncoder(),
+            default => new AutoEncoder(),
+        };
+
+        $thumbData = (string) $thumb->encode($encoder);
 
         // Use original image data if we're keeping the ratio
         // and the resizing does not save any space.
@@ -150,8 +156,9 @@ class ImageResizer
      */
     protected function interventionFromImageData(string $imageData): InterventionImage
     {
-        $driver = new Driver();
-        return $driver->decoder->initFromBinary($imageData);
+        $manager = new ImageManager(new Driver());
+
+        return $manager->read($imageData, BinaryImageDecoder::class);
     }
 
     /**
index 85bb3cbaebdaf3295b339ec6e8260d14f0ea2530..b22c7b44de9ab52ed65291f40a249d6aa9be496c 100644 (file)
@@ -8,7 +8,7 @@
     "license": "MIT",
     "type": "project",
     "require": {
-        "php": "^8.0.2",
+        "php": "^8.1.0",
         "ext-curl": "*",
         "ext-dom": "*",
         "ext-fileinfo": "*",
         "barryvdh/laravel-snappy": "^1.0",
         "doctrine/dbal": "^3.5",
         "guzzlehttp/guzzle": "^7.4",
-        "intervention/image": "^2.7",
-        "laravel/framework": "^9.0",
+        "intervention/image": "^3.5",
+        "laravel/framework": "^10.10",
         "laravel/socialite": "^5.10",
-        "laravel/tinker": "^2.6",
+        "laravel/tinker": "^2.8",
         "league/commonmark": "^2.3",
         "league/flysystem-aws-s3-v3": "^3.0",
         "league/html-to-markdown": "^5.0.0",
         "socialiteproviders/okta": "^4.2",
         "socialiteproviders/twitch": "^5.3",
         "ssddanbrown/htmldiff": "^1.0.2",
-        "ssddanbrown/symfony-mailer": "6.0.x-dev"
+        "ssddanbrown/symfony-mailer": "6.4.x-dev"
     },
     "require-dev": {
         "fakerphp/faker": "^1.21",
         "itsgoingd/clockwork": "^5.1",
         "mockery/mockery": "^1.5",
-        "nunomaduro/collision": "^6.4",
+        "nunomaduro/collision": "^7.0",
         "larastan/larastan": "^2.7",
-        "phpunit/phpunit": "^9.5",
+        "phpunit/phpunit": "^10.0",
         "squizlabs/php_codesniffer": "^3.7",
-        "ssddanbrown/asserthtml": "^2.0"
+        "ssddanbrown/asserthtml": "^3.0"
     },
     "autoload": {
         "psr-4": {
         "lint": "phpcs",
         "test": "phpunit",
         "t-reset": "@php artisan test --recreate-databases",
+        "build-licenses": [
+            "@php ./dev/licensing/gen-js-licenses",
+            "@php ./dev/licensing/gen-php-licenses"
+        ],
         "post-autoload-dump": [
             "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
             "@php artisan package:discover --ansi"
         "preferred-install": "dist",
         "sort-packages": true,
         "platform": {
-            "php": "8.0.2"
+            "php": "8.1.0"
         }
     },
     "extra": {
index e1033b5b26ae3c46003765c8aa2271117be9f3a1..24c2215dd5f730d7e022104e29a84029b6cc55ab 100644 (file)
@@ -4,7 +4,7 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "7c64775f79832d552a2ef40e11f79c40",
+    "content-hash": "ccfc07d0ecc580962915a0457f0466a7",
     "packages": [
         {
             "name": "aws/aws-crt-php",
         },
         {
             "name": "aws/aws-sdk-php",
-            "version": "3.300.6",
+            "version": "3.301.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/aws/aws-sdk-php.git",
-                "reference": "957ccef631684d612d01ced2fa3b0506f2ec78c3"
+                "reference": "0a910d2b35e7087337cdf3569dc9b6ce232aafba"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/957ccef631684d612d01ced2fa3b0506f2ec78c3",
-                "reference": "957ccef631684d612d01ced2fa3b0506f2ec78c3",
+                "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/0a910d2b35e7087337cdf3569dc9b6ce232aafba",
+                "reference": "0a910d2b35e7087337cdf3569dc9b6ce232aafba",
                 "shasum": ""
             },
             "require": {
             "support": {
                 "forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80",
                 "issues": "https://github.com/aws/aws-sdk-php/issues",
-                "source": "https://github.com/aws/aws-sdk-php/tree/3.300.6"
+                "source": "https://github.com/aws/aws-sdk-php/tree/3.301.1"
             },
-            "time": "2024-02-27T19:05:27+00:00"
+            "time": "2024-03-15T18:14:42+00:00"
         },
         {
             "name": "bacon/bacon-qr-code",
         },
         {
             "name": "barryvdh/laravel-dompdf",
-            "version": "v2.0.1",
+            "version": "v2.1.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/barryvdh/laravel-dompdf.git",
-                "reference": "9843d2be423670fb434f4c978b3c0f4dd92c87a6"
+                "reference": "cb37868365f9b937039d316727a1fced1e87b31c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/barryvdh/laravel-dompdf/zipball/9843d2be423670fb434f4c978b3c0f4dd92c87a6",
-                "reference": "9843d2be423670fb434f4c978b3c0f4dd92c87a6",
+                "url": "https://api.github.com/repos/barryvdh/laravel-dompdf/zipball/cb37868365f9b937039d316727a1fced1e87b31c",
+                "reference": "cb37868365f9b937039d316727a1fced1e87b31c",
                 "shasum": ""
             },
             "require": {
-                "dompdf/dompdf": "^2.0.1",
-                "illuminate/support": "^6|^7|^8|^9|^10",
+                "dompdf/dompdf": "^2.0.3",
+                "illuminate/support": "^6|^7|^8|^9|^10|^11",
                 "php": "^7.2 || ^8.0"
             },
             "require-dev": {
-                "nunomaduro/larastan": "^1|^2",
-                "orchestra/testbench": "^4|^5|^6|^7|^8",
-                "phpro/grumphp": "^1",
+                "larastan/larastan": "^1.0|^2.7.0",
+                "orchestra/testbench": "^4|^5|^6|^7|^8|^9",
+                "phpro/grumphp": "^1 || ^2.5",
                 "squizlabs/php_codesniffer": "^3.5"
             },
             "type": "library",
             ],
             "support": {
                 "issues": "https://github.com/barryvdh/laravel-dompdf/issues",
-                "source": "https://github.com/barryvdh/laravel-dompdf/tree/v2.0.1"
+                "source": "https://github.com/barryvdh/laravel-dompdf/tree/v2.1.1"
             },
             "funding": [
                 {
                     "type": "github"
                 }
             ],
-            "time": "2023-01-12T15:12:49+00:00"
+            "time": "2024-03-15T12:48:39+00:00"
         },
         {
             "name": "barryvdh/laravel-snappy",
-            "version": "v1.0.2",
+            "version": "v1.0.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/barryvdh/laravel-snappy.git",
-                "reference": "940eec2d99b89cbc9bea2f493cf068382962a485"
+                "reference": "716dcb6db24de4ce8e6ae5941cfab152af337ea0"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/barryvdh/laravel-snappy/zipball/940eec2d99b89cbc9bea2f493cf068382962a485",
-                "reference": "940eec2d99b89cbc9bea2f493cf068382962a485",
+                "url": "https://api.github.com/repos/barryvdh/laravel-snappy/zipball/716dcb6db24de4ce8e6ae5941cfab152af337ea0",
+                "reference": "716dcb6db24de4ce8e6ae5941cfab152af337ea0",
                 "shasum": ""
             },
             "require": {
-                "illuminate/filesystem": "^9|^10",
-                "illuminate/support": "^9|^10",
-                "knplabs/knp-snappy": "^1.4",
+                "illuminate/filesystem": "^9|^10|^11.0",
+                "illuminate/support": "^9|^10|^11.0",
+                "knplabs/knp-snappy": "^1.4.4",
                 "php": ">=7.2"
             },
             "require-dev": {
-                "orchestra/testbench": "^7|^8"
+                "orchestra/testbench": "^7|^8|^9.0"
             },
             "type": "library",
             "extra": {
             ],
             "support": {
                 "issues": "https://github.com/barryvdh/laravel-snappy/issues",
-                "source": "https://github.com/barryvdh/laravel-snappy/tree/v1.0.2"
+                "source": "https://github.com/barryvdh/laravel-snappy/tree/v1.0.3"
             },
             "funding": [
                 {
                     "type": "github"
                 }
             ],
-            "time": "2023-04-07T10:38:54+00:00"
+            "time": "2024-03-09T19:20:39+00:00"
         },
         {
             "name": "brick/math",
         },
         {
             "name": "doctrine/dbal",
-            "version": "3.8.2",
+            "version": "3.8.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/doctrine/dbal.git",
-                "reference": "a19a1d05ca211f41089dffcc387733a6875196cb"
+                "reference": "db922ba9436b7b18a23d1653a0b41ff2369ca41c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/dbal/zipball/a19a1d05ca211f41089dffcc387733a6875196cb",
-                "reference": "a19a1d05ca211f41089dffcc387733a6875196cb",
+                "url": "https://api.github.com/repos/doctrine/dbal/zipball/db922ba9436b7b18a23d1653a0b41ff2369ca41c",
+                "reference": "db922ba9436b7b18a23d1653a0b41ff2369ca41c",
                 "shasum": ""
             },
             "require": {
                 "doctrine/coding-standard": "12.0.0",
                 "fig/log-test": "^1",
                 "jetbrains/phpstorm-stubs": "2023.1",
-                "phpstan/phpstan": "1.10.57",
+                "phpstan/phpstan": "1.10.58",
                 "phpstan/phpstan-strict-rules": "^1.5",
                 "phpunit/phpunit": "9.6.16",
                 "psalm/plugin-phpunit": "0.18.4",
                 "slevomat/coding-standard": "8.13.1",
-                "squizlabs/php_codesniffer": "3.8.1",
+                "squizlabs/php_codesniffer": "3.9.0",
                 "symfony/cache": "^5.4|^6.0|^7.0",
                 "symfony/console": "^4.4|^5.4|^6.0|^7.0",
                 "vimeo/psalm": "4.30.0"
             ],
             "support": {
                 "issues": "https://github.com/doctrine/dbal/issues",
-                "source": "https://github.com/doctrine/dbal/tree/3.8.2"
+                "source": "https://github.com/doctrine/dbal/tree/3.8.3"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-02-12T18:36:36+00:00"
+            "time": "2024-03-03T15:55:06+00:00"
         },
         {
             "name": "doctrine/deprecations",
         },
         {
             "name": "doctrine/event-manager",
-            "version": "1.2.0",
+            "version": "2.0.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/doctrine/event-manager.git",
-                "reference": "95aa4cb529f1e96576f3fda9f5705ada4056a520"
+                "reference": "750671534e0241a7c50ea5b43f67e23eb5c96f32"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/event-manager/zipball/95aa4cb529f1e96576f3fda9f5705ada4056a520",
-                "reference": "95aa4cb529f1e96576f3fda9f5705ada4056a520",
+                "url": "https://api.github.com/repos/doctrine/event-manager/zipball/750671534e0241a7c50ea5b43f67e23eb5c96f32",
+                "reference": "750671534e0241a7c50ea5b43f67e23eb5c96f32",
                 "shasum": ""
             },
             "require": {
-                "doctrine/deprecations": "^0.5.3 || ^1",
-                "php": "^7.1 || ^8.0"
+                "php": "^8.1"
             },
             "conflict": {
                 "doctrine/common": "<2.9"
             },
             "require-dev": {
-                "doctrine/coding-standard": "^9 || ^10",
-                "phpstan/phpstan": "~1.4.10 || ^1.8.8",
-                "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
-                "vimeo/psalm": "^4.24"
+                "doctrine/coding-standard": "^10",
+                "phpstan/phpstan": "^1.8.8",
+                "phpunit/phpunit": "^9.5",
+                "vimeo/psalm": "^4.28"
             },
             "type": "library",
             "autoload": {
             ],
             "support": {
                 "issues": "https://github.com/doctrine/event-manager/issues",
-                "source": "https://github.com/doctrine/event-manager/tree/1.2.0"
+                "source": "https://github.com/doctrine/event-manager/tree/2.0.0"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2022-10-12T20:51:15+00:00"
+            "time": "2022-10-12T20:59:15+00:00"
         },
         {
             "name": "doctrine/inflector",
         },
         {
             "name": "doctrine/lexer",
-            "version": "2.1.1",
+            "version": "3.0.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/doctrine/lexer.git",
-                "reference": "861c870e8b75f7c8f69c146c7f89cc1c0f1b49b6"
+                "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/lexer/zipball/861c870e8b75f7c8f69c146c7f89cc1c0f1b49b6",
-                "reference": "861c870e8b75f7c8f69c146c7f89cc1c0f1b49b6",
+                "url": "https://api.github.com/repos/doctrine/lexer/zipball/31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd",
+                "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd",
                 "shasum": ""
             },
             "require": {
-                "doctrine/deprecations": "^1.0",
-                "php": "^7.1 || ^8.0"
+                "php": "^8.1"
             },
             "require-dev": {
-                "doctrine/coding-standard": "^9 || ^12",
-                "phpstan/phpstan": "^1.3",
-                "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6",
+                "doctrine/coding-standard": "^12",
+                "phpstan/phpstan": "^1.10",
+                "phpunit/phpunit": "^10.5",
                 "psalm/plugin-phpunit": "^0.18.3",
-                "vimeo/psalm": "^4.11 || ^5.21"
+                "vimeo/psalm": "^5.21"
             },
             "type": "library",
             "autoload": {
             ],
             "support": {
                 "issues": "https://github.com/doctrine/lexer/issues",
-                "source": "https://github.com/doctrine/lexer/tree/2.1.1"
+                "source": "https://github.com/doctrine/lexer/tree/3.0.1"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-02-05T11:35:39+00:00"
+            "time": "2024-02-05T11:56:58+00:00"
         },
         {
             "name": "dompdf/dompdf",
         },
         {
             "name": "egulias/email-validator",
-            "version": "3.2.6",
+            "version": "4.0.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/egulias/EmailValidator.git",
-                "reference": "e5997fa97e8790cdae03a9cbd5e78e45e3c7bda7"
+                "reference": "ebaaf5be6c0286928352e054f2d5125608e5405e"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/e5997fa97e8790cdae03a9cbd5e78e45e3c7bda7",
-                "reference": "e5997fa97e8790cdae03a9cbd5e78e45e3c7bda7",
+                "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/ebaaf5be6c0286928352e054f2d5125608e5405e",
+                "reference": "ebaaf5be6c0286928352e054f2d5125608e5405e",
                 "shasum": ""
             },
             "require": {
-                "doctrine/lexer": "^1.2|^2",
-                "php": ">=7.2",
-                "symfony/polyfill-intl-idn": "^1.15"
+                "doctrine/lexer": "^2.0 || ^3.0",
+                "php": ">=8.1",
+                "symfony/polyfill-intl-idn": "^1.26"
             },
             "require-dev": {
-                "phpunit/phpunit": "^8.5.8|^9.3.3",
-                "vimeo/psalm": "^4"
+                "phpunit/phpunit": "^10.2",
+                "vimeo/psalm": "^5.12"
             },
             "suggest": {
                 "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation"
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.0.x-dev"
+                    "dev-master": "4.0.x-dev"
                 }
             },
             "autoload": {
             ],
             "support": {
                 "issues": "https://github.com/egulias/EmailValidator/issues",
-                "source": "https://github.com/egulias/EmailValidator/tree/3.2.6"
+                "source": "https://github.com/egulias/EmailValidator/tree/4.0.2"
             },
             "funding": [
                 {
                     "type": "github"
                 }
             ],
-            "time": "2023-06-01T07:04:22+00:00"
+            "time": "2023-10-06T06:47:41+00:00"
         },
         {
             "name": "fruitcake/php-cors",
             ],
             "time": "2023-12-03T19:50:20+00:00"
         },
+        {
+            "name": "intervention/gif",
+            "version": "4.0.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/Intervention/gif.git",
+                "reference": "c2b07d1f69709e196c8b4ced423449a7e0f3b925"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/Intervention/gif/zipball/c2b07d1f69709e196c8b4ced423449a7e0f3b925",
+                "reference": "c2b07d1f69709e196c8b4ced423449a7e0f3b925",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^8.1"
+            },
+            "require-dev": {
+                "phpstan/phpstan": "^1",
+                "phpunit/phpunit": "^9",
+                "slevomat/coding-standard": "~8.0",
+                "squizlabs/php_codesniffer": "^3.8"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Intervention\\Gif\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Oliver Vogel",
+                    "email": "[email protected]",
+                    "homepage": "https://intervention.io/"
+                }
+            ],
+            "description": "Native PHP GIF Encoder/Decoder",
+            "homepage": "https://github.com/intervention/gif",
+            "keywords": [
+                "animation",
+                "gd",
+                "gif",
+                "image"
+            ],
+            "support": {
+                "issues": "https://github.com/Intervention/gif/issues",
+                "source": "https://github.com/Intervention/gif/tree/4.0.2"
+            },
+            "funding": [
+                {
+                    "url": "https://paypal.me/interventionio",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/Intervention",
+                    "type": "github"
+                }
+            ],
+            "time": "2024-02-18T15:36:58+00:00"
+        },
         {
             "name": "intervention/image",
-            "version": "2.7.2",
+            "version": "3.5.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/Intervention/image.git",
-                "reference": "04be355f8d6734c826045d02a1079ad658322dad"
+                "reference": "408d3655c7705339e8c79731ea7efb51546cfa10"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/Intervention/image/zipball/04be355f8d6734c826045d02a1079ad658322dad",
-                "reference": "04be355f8d6734c826045d02a1079ad658322dad",
+                "url": "https://api.github.com/repos/Intervention/image/zipball/408d3655c7705339e8c79731ea7efb51546cfa10",
+                "reference": "408d3655c7705339e8c79731ea7efb51546cfa10",
                 "shasum": ""
             },
             "require": {
-                "ext-fileinfo": "*",
-                "guzzlehttp/psr7": "~1.1 || ^2.0",
-                "php": ">=5.4.0"
+                "ext-mbstring": "*",
+                "intervention/gif": "^4.0.1",
+                "php": "^8.1"
             },
             "require-dev": {
-                "mockery/mockery": "~0.9.2",
-                "phpunit/phpunit": "^4.8 || ^5.7 || ^7.5.15"
+                "mockery/mockery": "^1.6",
+                "phpstan/phpstan": "^1",
+                "phpunit/phpunit": "^10.0",
+                "slevomat/coding-standard": "~8.0",
+                "squizlabs/php_codesniffer": "^3.8"
             },
             "suggest": {
-                "ext-gd": "to use GD library based image processing.",
-                "ext-imagick": "to use Imagick based image processing.",
-                "intervention/imagecache": "Caching extension for the Intervention Image library"
+                "ext-exif": "Recommended to be able to read EXIF data properly."
             },
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.4-dev"
-                },
-                "laravel": {
-                    "providers": [
-                        "Intervention\\Image\\ImageServiceProvider"
-                    ],
-                    "aliases": {
-                        "Image": "Intervention\\Image\\Facades\\Image"
-                    }
-                }
-            },
             "autoload": {
                 "psr-4": {
-                    "Intervention\\Image\\": "src/Intervention/Image"
+                    "Intervention\\Image\\": "src"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
                     "homepage": "https://intervention.io/"
                 }
             ],
-            "description": "Image handling and manipulation library with support for Laravel integration",
-            "homepage": "http://image.intervention.io/",
+            "description": "PHP image manipulation",
+            "homepage": "https://image.intervention.io/",
             "keywords": [
                 "gd",
                 "image",
                 "imagick",
-                "laravel",
+                "resize",
                 "thumbnail",
                 "watermark"
             ],
             "support": {
                 "issues": "https://github.com/Intervention/image/issues",
-                "source": "https://github.com/Intervention/image/tree/2.7.2"
+                "source": "https://github.com/Intervention/image/tree/3.5.0"
             },
             "funding": [
                 {
                     "type": "github"
                 }
             ],
-            "time": "2022-05-21T17:30:32+00:00"
+            "time": "2024-03-13T16:26:15+00:00"
         },
         {
             "name": "knplabs/knp-snappy",
-            "version": "v1.4.4",
+            "version": "v1.5.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/KnpLabs/snappy.git",
-                "reference": "3db13fe45d12a7bccb2b83f622e5a90f7e40b111"
+                "reference": "98468898b50c09f26d56d905b79b0f52a2215da6"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/KnpLabs/snappy/zipball/3db13fe45d12a7bccb2b83f622e5a90f7e40b111",
-                "reference": "3db13fe45d12a7bccb2b83f622e5a90f7e40b111",
+                "url": "https://api.github.com/repos/KnpLabs/snappy/zipball/98468898b50c09f26d56d905b79b0f52a2215da6",
+                "reference": "98468898b50c09f26d56d905b79b0f52a2215da6",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.1",
-                "psr/log": "^1.0||^2.0||^3.0",
-                "symfony/process": "~3.4||~4.3||~5.0||~6.0"
+                "php": ">=8.1",
+                "psr/log": "^2.0||^3.0",
+                "symfony/process": "^5.0||^6.0||^7.0"
             },
             "require-dev": {
-                "friendsofphp/php-cs-fixer": "^2.16||^3.0",
+                "friendsofphp/php-cs-fixer": "^3.0",
                 "pedrotroller/php-cs-custom-fixer": "^2.19",
                 "phpstan/phpstan": "^1.0.0",
                 "phpstan/phpstan-phpunit": "^1.0.0",
-                "phpunit/phpunit": "~7.4||~8.5"
-            },
-            "suggest": {
-                "h4cc/wkhtmltoimage-amd64": "Provides wkhtmltoimage-amd64 binary for Linux-compatible machines, use version `~0.12` as dependency",
-                "h4cc/wkhtmltoimage-i386": "Provides wkhtmltoimage-i386 binary for Linux-compatible machines, use version `~0.12` as dependency",
-                "h4cc/wkhtmltopdf-amd64": "Provides wkhtmltopdf-amd64 binary for Linux-compatible machines, use version `~0.12` as dependency",
-                "h4cc/wkhtmltopdf-i386": "Provides wkhtmltopdf-i386 binary for Linux-compatible machines, use version `~0.12` as dependency",
-                "wemersonjanuario/wkhtmltopdf-windows": "Provides wkhtmltopdf executable for Windows, use version `~0.12` as dependency"
+                "phpunit/phpunit": "^8.5"
             },
             "type": "library",
             "extra": {
             ],
             "support": {
                 "issues": "https://github.com/KnpLabs/snappy/issues",
-                "source": "https://github.com/KnpLabs/snappy/tree/v1.4.4"
+                "source": "https://github.com/KnpLabs/snappy/tree/v1.5.0"
             },
-            "time": "2023-09-13T12:18:19+00:00"
+            "time": "2023-12-18T09:12:11+00:00"
         },
         {
             "name": "laravel/framework",
-            "version": "v9.52.16",
+            "version": "v10.48.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/laravel/framework.git",
-                "reference": "082345d76fc6a55b649572efe10b11b03e279d24"
+                "reference": "5791c052b41c6b593556adc687076bfbdd13c501"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/laravel/framework/zipball/082345d76fc6a55b649572efe10b11b03e279d24",
-                "reference": "082345d76fc6a55b649572efe10b11b03e279d24",
+                "url": "https://api.github.com/repos/laravel/framework/zipball/5791c052b41c6b593556adc687076bfbdd13c501",
+                "reference": "5791c052b41c6b593556adc687076bfbdd13c501",
                 "shasum": ""
             },
             "require": {
-                "brick/math": "^0.9.3|^0.10.2|^0.11",
+                "brick/math": "^0.9.3|^0.10.2|^0.11|^0.12",
+                "composer-runtime-api": "^2.2",
                 "doctrine/inflector": "^2.0.5",
                 "dragonmantank/cron-expression": "^3.3.2",
                 "egulias/email-validator": "^3.2.1|^4.0",
                 "ext-tokenizer": "*",
                 "fruitcake/php-cors": "^1.2",
                 "guzzlehttp/uri-template": "^1.0",
-                "laravel/serializable-closure": "^1.2.2",
+                "laravel/prompts": "^0.1.9",
+                "laravel/serializable-closure": "^1.3",
                 "league/commonmark": "^2.2.1",
                 "league/flysystem": "^3.8.0",
-                "monolog/monolog": "^2.0",
-                "nesbot/carbon": "^2.62.1",
+                "monolog/monolog": "^3.0",
+                "nesbot/carbon": "^2.67",
                 "nunomaduro/termwind": "^1.13",
-                "php": "^8.0.2",
+                "php": "^8.1",
                 "psr/container": "^1.1.1|^2.0.1",
                 "psr/log": "^1.0|^2.0|^3.0",
                 "psr/simple-cache": "^1.0|^2.0|^3.0",
                 "ramsey/uuid": "^4.7",
-                "symfony/console": "^6.0.9",
-                "symfony/error-handler": "^6.0",
-                "symfony/finder": "^6.0",
-                "symfony/http-foundation": "^6.0",
-                "symfony/http-kernel": "^6.0",
-                "symfony/mailer": "^6.0",
-                "symfony/mime": "^6.0",
-                "symfony/process": "^6.0",
-                "symfony/routing": "^6.0",
-                "symfony/uid": "^6.0",
-                "symfony/var-dumper": "^6.0",
+                "symfony/console": "^6.2",
+                "symfony/error-handler": "^6.2",
+                "symfony/finder": "^6.2",
+                "symfony/http-foundation": "^6.4",
+                "symfony/http-kernel": "^6.2",
+                "symfony/mailer": "^6.2",
+                "symfony/mime": "^6.2",
+                "symfony/process": "^6.2",
+                "symfony/routing": "^6.2",
+                "symfony/uid": "^6.2",
+                "symfony/var-dumper": "^6.2",
                 "tijsverkoyen/css-to-inline-styles": "^2.2.5",
                 "vlucas/phpdotenv": "^5.4.1",
                 "voku/portable-ascii": "^2.0"
             },
             "conflict": {
+                "carbonphp/carbon-doctrine-types": ">=3.0",
+                "doctrine/dbal": ">=4.0",
+                "mockery/mockery": "1.6.8",
+                "phpunit/phpunit": ">=11.0.0",
                 "tightenco/collect": "<5.5.33"
             },
             "provide": {
                 "illuminate/notifications": "self.version",
                 "illuminate/pagination": "self.version",
                 "illuminate/pipeline": "self.version",
+                "illuminate/process": "self.version",
                 "illuminate/queue": "self.version",
                 "illuminate/redis": "self.version",
                 "illuminate/routing": "self.version",
             "require-dev": {
                 "ably/ably-php": "^1.0",
                 "aws/aws-sdk-php": "^3.235.5",
-                "doctrine/dbal": "^2.13.3|^3.1.4",
+                "doctrine/dbal": "^3.5.1",
                 "ext-gmp": "*",
                 "fakerphp/faker": "^1.21",
                 "guzzlehttp/guzzle": "^7.5",
                 "league/flysystem-read-only": "^3.3",
                 "league/flysystem-sftp-v3": "^3.0",
                 "mockery/mockery": "^1.5.1",
-                "orchestra/testbench-core": "^7.24",
+                "nyholm/psr7": "^1.2",
+                "orchestra/testbench-core": "^8.18",
                 "pda/pheanstalk": "^4.0",
-                "phpstan/phpdoc-parser": "^1.15",
                 "phpstan/phpstan": "^1.4.7",
-                "phpunit/phpunit": "^9.5.8",
-                "predis/predis": "^1.1.9|^2.0.2",
-                "symfony/cache": "^6.0",
-                "symfony/http-client": "^6.0"
+                "phpunit/phpunit": "^10.0.7",
+                "predis/predis": "^2.0.2",
+                "symfony/cache": "^6.2",
+                "symfony/http-client": "^6.2.4",
+                "symfony/psr-http-message-bridge": "^2.0"
             },
             "suggest": {
                 "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).",
                 "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage, and SES mail driver (^3.235.5).",
                 "brianium/paratest": "Required to run tests in parallel (^6.0).",
-                "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.13.3|^3.1.4).",
+                "doctrine/dbal": "Required to rename columns and drop SQLite columns (^3.5.1).",
                 "ext-apcu": "Required to use the APC cache driver.",
                 "ext-fileinfo": "Required to use the Filesystem class.",
                 "ext-ftp": "Required to use the Flysystem FTP driver.",
                 "mockery/mockery": "Required to use mocking (^1.5.1).",
                 "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).",
                 "pda/pheanstalk": "Required to use the beanstalk queue driver (^4.0).",
-                "phpunit/phpunit": "Required to use assertions and run tests (^9.5.8).",
-                "predis/predis": "Required to use the predis connector (^1.1.9|^2.0.2).",
+                "phpunit/phpunit": "Required to use assertions and run tests (^9.5.8|^10.0.7).",
+                "predis/predis": "Required to use the predis connector (^2.0.2).",
                 "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).",
                 "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^6.0|^7.0).",
-                "symfony/cache": "Required to PSR-6 cache bridge (^6.0).",
-                "symfony/filesystem": "Required to enable support for relative symbolic links (^6.0).",
-                "symfony/http-client": "Required to enable support for the Symfony API mail transports (^6.0).",
-                "symfony/mailgun-mailer": "Required to enable support for the Mailgun mail transport (^6.0).",
-                "symfony/postmark-mailer": "Required to enable support for the Postmark mail transport (^6.0).",
+                "symfony/cache": "Required to PSR-6 cache bridge (^6.2).",
+                "symfony/filesystem": "Required to enable support for relative symbolic links (^6.2).",
+                "symfony/http-client": "Required to enable support for the Symfony API mail transports (^6.2).",
+                "symfony/mailgun-mailer": "Required to enable support for the Mailgun mail transport (^6.2).",
+                "symfony/postmark-mailer": "Required to enable support for the Postmark mail transport (^6.2).",
                 "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^2.0)."
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "9.x-dev"
+                    "dev-master": "10.x-dev"
                 }
             },
             "autoload": {
                 "files": [
                     "src/Illuminate/Collections/helpers.php",
                     "src/Illuminate/Events/functions.php",
+                    "src/Illuminate/Filesystem/functions.php",
                     "src/Illuminate/Foundation/helpers.php",
                     "src/Illuminate/Support/helpers.php"
                 ],
                 "issues": "https://github.com/laravel/framework/issues",
                 "source": "https://github.com/laravel/framework"
             },
-            "time": "2023-10-03T13:02:30+00:00"
+            "time": "2024-03-15T10:17:07+00:00"
+        },
+        {
+            "name": "laravel/prompts",
+            "version": "v0.1.16",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/laravel/prompts.git",
+                "reference": "ca6872ab6aec3ab61db3a61f83a6caf764ec7781"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/laravel/prompts/zipball/ca6872ab6aec3ab61db3a61f83a6caf764ec7781",
+                "reference": "ca6872ab6aec3ab61db3a61f83a6caf764ec7781",
+                "shasum": ""
+            },
+            "require": {
+                "ext-mbstring": "*",
+                "illuminate/collections": "^10.0|^11.0",
+                "php": "^8.1",
+                "symfony/console": "^6.2|^7.0"
+            },
+            "conflict": {
+                "illuminate/console": ">=10.17.0 <10.25.0",
+                "laravel/framework": ">=10.17.0 <10.25.0"
+            },
+            "require-dev": {
+                "mockery/mockery": "^1.5",
+                "pestphp/pest": "^2.3",
+                "phpstan/phpstan": "^1.11",
+                "phpstan/phpstan-mockery": "^1.1"
+            },
+            "suggest": {
+                "ext-pcntl": "Required for the spinner to be animated."
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-main": "0.1.x-dev"
+                }
+            },
+            "autoload": {
+                "files": [
+                    "src/helpers.php"
+                ],
+                "psr-4": {
+                    "Laravel\\Prompts\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "support": {
+                "issues": "https://github.com/laravel/prompts/issues",
+                "source": "https://github.com/laravel/prompts/tree/v0.1.16"
+            },
+            "time": "2024-02-21T19:25:27+00:00"
         },
         {
             "name": "laravel/serializable-closure",
         },
         {
             "name": "league/flysystem",
-            "version": "3.24.0",
+            "version": "3.25.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/thephpleague/flysystem.git",
-                "reference": "b25a361508c407563b34fac6f64a8a17a8819675"
+                "reference": "abbd664eb4381102c559d358420989f835208f18"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/b25a361508c407563b34fac6f64a8a17a8819675",
-                "reference": "b25a361508c407563b34fac6f64a8a17a8819675",
+                "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/abbd664eb4381102c559d358420989f835208f18",
+                "reference": "abbd664eb4381102c559d358420989f835208f18",
                 "shasum": ""
             },
             "require": {
                 "friendsofphp/php-cs-fixer": "^3.5",
                 "google/cloud-storage": "^1.23",
                 "microsoft/azure-storage-blob": "^1.1",
-                "phpseclib/phpseclib": "^3.0.34",
+                "phpseclib/phpseclib": "^3.0.36",
                 "phpstan/phpstan": "^1.10",
                 "phpunit/phpunit": "^9.5.11|^10.0",
                 "sabre/dav": "^4.6.0"
             ],
             "support": {
                 "issues": "https://github.com/thephpleague/flysystem/issues",
-                "source": "https://github.com/thephpleague/flysystem/tree/3.24.0"
+                "source": "https://github.com/thephpleague/flysystem/tree/3.25.1"
             },
             "funding": [
                 {
                     "type": "github"
                 }
             ],
-            "time": "2024-02-04T12:10:17+00:00"
+            "time": "2024-03-16T12:53:19+00:00"
         },
         {
             "name": "league/flysystem-aws-s3-v3",
-            "version": "3.24.0",
+            "version": "3.25.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/thephpleague/flysystem-aws-s3-v3.git",
-                "reference": "809474e37b7fb1d1f8bcc0f8a98bc1cae99aa513"
+                "reference": "6a5be0e6d6a93574e80805c9cc108a4b63c824d8"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/809474e37b7fb1d1f8bcc0f8a98bc1cae99aa513",
-                "reference": "809474e37b7fb1d1f8bcc0f8a98bc1cae99aa513",
+                "url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/6a5be0e6d6a93574e80805c9cc108a4b63c824d8",
+                "reference": "6a5be0e6d6a93574e80805c9cc108a4b63c824d8",
                 "shasum": ""
             },
             "require": {
                 "storage"
             ],
             "support": {
-                "source": "https://github.com/thephpleague/flysystem-aws-s3-v3/tree/3.24.0"
+                "source": "https://github.com/thephpleague/flysystem-aws-s3-v3/tree/3.25.1"
             },
             "funding": [
                 {
                     "type": "github"
                 }
             ],
-            "time": "2024-01-26T18:43:21+00:00"
+            "time": "2024-03-15T19:58:44+00:00"
         },
         {
             "name": "league/flysystem-local",
-            "version": "3.23.1",
+            "version": "3.25.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/thephpleague/flysystem-local.git",
-                "reference": "b884d2bf9b53bb4804a56d2df4902bb51e253f00"
+                "reference": "61a6a90d6e999e4ddd9ce5adb356de0939060b92"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/b884d2bf9b53bb4804a56d2df4902bb51e253f00",
-                "reference": "b884d2bf9b53bb4804a56d2df4902bb51e253f00",
+                "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/61a6a90d6e999e4ddd9ce5adb356de0939060b92",
+                "reference": "61a6a90d6e999e4ddd9ce5adb356de0939060b92",
                 "shasum": ""
             },
             "require": {
                 "local"
             ],
             "support": {
-                "issues": "https://github.com/thephpleague/flysystem-local/issues",
-                "source": "https://github.com/thephpleague/flysystem-local/tree/3.23.1"
+                "source": "https://github.com/thephpleague/flysystem-local/tree/3.25.1"
             },
             "funding": [
                 {
                     "type": "github"
                 }
             ],
-            "time": "2024-01-26T18:25:23+00:00"
+            "time": "2024-03-15T19:58:44+00:00"
         },
         {
             "name": "league/html-to-markdown",
         },
         {
             "name": "monolog/monolog",
-            "version": "2.9.2",
+            "version": "3.5.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/Seldaek/monolog.git",
-                "reference": "437cb3628f4cf6042cc10ae97fc2b8472e48ca1f"
+                "reference": "c915e2634718dbc8a4a15c61b0e62e7a44e14448"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/Seldaek/monolog/zipball/437cb3628f4cf6042cc10ae97fc2b8472e48ca1f",
-                "reference": "437cb3628f4cf6042cc10ae97fc2b8472e48ca1f",
+                "url": "https://api.github.com/repos/Seldaek/monolog/zipball/c915e2634718dbc8a4a15c61b0e62e7a44e14448",
+                "reference": "c915e2634718dbc8a4a15c61b0e62e7a44e14448",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.2",
-                "psr/log": "^1.0.1 || ^2.0 || ^3.0"
+                "php": ">=8.1",
+                "psr/log": "^2.0 || ^3.0"
             },
             "provide": {
-                "psr/log-implementation": "1.0.0 || 2.0.0 || 3.0.0"
+                "psr/log-implementation": "3.0.0"
             },
             "require-dev": {
-                "aws/aws-sdk-php": "^2.4.9 || ^3.0",
+                "aws/aws-sdk-php": "^3.0",
                 "doctrine/couchdb": "~1.0@dev",
                 "elasticsearch/elasticsearch": "^7 || ^8",
                 "ext-json": "*",
-                "graylog2/gelf-php": "^1.4.2 || ^2@dev",
-                "guzzlehttp/guzzle": "^7.4",
+                "graylog2/gelf-php": "^1.4.2 || ^2.0",
+                "guzzlehttp/guzzle": "^7.4.5",
                 "guzzlehttp/psr7": "^2.2",
                 "mongodb/mongodb": "^1.8",
                 "php-amqplib/php-amqplib": "~2.4 || ^3",
-                "phpspec/prophecy": "^1.15",
-                "phpstan/phpstan": "^0.12.91",
-                "phpunit/phpunit": "^8.5.14",
-                "predis/predis": "^1.1 || ^2.0",
-                "rollbar/rollbar": "^1.3 || ^2 || ^3",
+                "phpstan/phpstan": "^1.9",
+                "phpstan/phpstan-deprecation-rules": "^1.0",
+                "phpstan/phpstan-strict-rules": "^1.4",
+                "phpunit/phpunit": "^10.1",
+                "predis/predis": "^1.1 || ^2",
                 "ruflin/elastica": "^7",
-                "swiftmailer/swiftmailer": "^5.3|^6.0",
                 "symfony/mailer": "^5.4 || ^6",
                 "symfony/mime": "^5.4 || ^6"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-main": "2.x-dev"
+                    "dev-main": "3.x-dev"
                 }
             },
             "autoload": {
             ],
             "support": {
                 "issues": "https://github.com/Seldaek/monolog/issues",
-                "source": "https://github.com/Seldaek/monolog/tree/2.9.2"
+                "source": "https://github.com/Seldaek/monolog/tree/3.5.0"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2023-10-27T15:25:26+00:00"
+            "time": "2023-10-27T15:32:31+00:00"
         },
         {
             "name": "mtdowling/jmespath.php",
         },
         {
             "name": "nette/schema",
-            "version": "v1.2.5",
+            "version": "v1.3.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/nette/schema.git",
-                "reference": "0462f0166e823aad657c9224d0f849ecac1ba10a"
+                "reference": "a6d3a6d1f545f01ef38e60f375d1cf1f4de98188"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/nette/schema/zipball/0462f0166e823aad657c9224d0f849ecac1ba10a",
-                "reference": "0462f0166e823aad657c9224d0f849ecac1ba10a",
+                "url": "https://api.github.com/repos/nette/schema/zipball/a6d3a6d1f545f01ef38e60f375d1cf1f4de98188",
+                "reference": "a6d3a6d1f545f01ef38e60f375d1cf1f4de98188",
                 "shasum": ""
             },
             "require": {
-                "nette/utils": "^2.5.7 || ^3.1.5 ||  ^4.0",
-                "php": "7.1 - 8.3"
+                "nette/utils": "^4.0",
+                "php": "8.1 - 8.3"
             },
             "require-dev": {
-                "nette/tester": "^2.3 || ^2.4",
+                "nette/tester": "^2.4",
                 "phpstan/phpstan-nette": "^1.0",
-                "tracy/tracy": "^2.7"
+                "tracy/tracy": "^2.8"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.2-dev"
+                    "dev-master": "1.3-dev"
                 }
             },
             "autoload": {
             ],
             "support": {
                 "issues": "https://github.com/nette/schema/issues",
-                "source": "https://github.com/nette/schema/tree/v1.2.5"
+                "source": "https://github.com/nette/schema/tree/v1.3.0"
             },
-            "time": "2023-10-05T20:37:59+00:00"
+            "time": "2023-12-11T11:54:22+00:00"
         },
         {
             "name": "nette/utils",
         },
         {
             "name": "nikic/php-parser",
-            "version": "v5.0.1",
+            "version": "v5.0.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/nikic/PHP-Parser.git",
-                "reference": "2218c2252c874a4624ab2f613d86ac32d227bc69"
+                "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/2218c2252c874a4624ab2f613d86ac32d227bc69",
-                "reference": "2218c2252c874a4624ab2f613d86ac32d227bc69",
+                "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/139676794dc1e9231bf7bcd123cfc0c99182cb13",
+                "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13",
                 "shasum": ""
             },
             "require": {
             ],
             "support": {
                 "issues": "https://github.com/nikic/PHP-Parser/issues",
-                "source": "https://github.com/nikic/PHP-Parser/tree/v5.0.1"
+                "source": "https://github.com/nikic/PHP-Parser/tree/v5.0.2"
             },
-            "time": "2024-02-21T19:24:10+00:00"
+            "time": "2024-03-05T20:51:40+00:00"
         },
         {
             "name": "nunomaduro/termwind",
         },
         {
             "name": "phenx/php-svg-lib",
-            "version": "0.5.2",
+            "version": "0.5.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/dompdf/php-svg-lib.git",
-                "reference": "732faa9fb4309221e2bd9b2fda5de44f947133aa"
+                "reference": "0e46722c154726a5f9ac218197ccc28adba16fcf"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/dompdf/php-svg-lib/zipball/732faa9fb4309221e2bd9b2fda5de44f947133aa",
-                "reference": "732faa9fb4309221e2bd9b2fda5de44f947133aa",
+                "url": "https://api.github.com/repos/dompdf/php-svg-lib/zipball/0e46722c154726a5f9ac218197ccc28adba16fcf",
+                "reference": "0e46722c154726a5f9ac218197ccc28adba16fcf",
                 "shasum": ""
             },
             "require": {
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "LGPL-3.0"
+                "LGPL-3.0-or-later"
             ],
             "authors": [
                 {
             "homepage": "https://github.com/PhenX/php-svg-lib",
             "support": {
                 "issues": "https://github.com/dompdf/php-svg-lib/issues",
-                "source": "https://github.com/dompdf/php-svg-lib/tree/0.5.2"
+                "source": "https://github.com/dompdf/php-svg-lib/tree/0.5.3"
             },
-            "time": "2024-02-07T12:49:40+00:00"
+            "time": "2024-02-23T20:39:24+00:00"
         },
         {
             "name": "phpoption/phpoption",
         },
         {
             "name": "phpseclib/phpseclib",
-            "version": "3.0.36",
+            "version": "3.0.37",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpseclib/phpseclib.git",
-                "reference": "c2fb5136162d4be18fdd4da9980696f3aee96d7b"
+                "reference": "cfa2013d0f68c062055180dd4328cc8b9d1f30b8"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/c2fb5136162d4be18fdd4da9980696f3aee96d7b",
-                "reference": "c2fb5136162d4be18fdd4da9980696f3aee96d7b",
+                "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/cfa2013d0f68c062055180dd4328cc8b9d1f30b8",
+                "reference": "cfa2013d0f68c062055180dd4328cc8b9d1f30b8",
                 "shasum": ""
             },
             "require": {
             ],
             "support": {
                 "issues": "https://github.com/phpseclib/phpseclib/issues",
-                "source": "https://github.com/phpseclib/phpseclib/tree/3.0.36"
+                "source": "https://github.com/phpseclib/phpseclib/tree/3.0.37"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-02-26T05:13:14+00:00"
+            "time": "2024-03-03T02:14:58+00:00"
         },
         {
             "name": "pragmarx/google2fa",
         },
         {
             "name": "psy/psysh",
-            "version": "v0.12.0",
+            "version": "v0.12.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/bobthecow/psysh.git",
-                "reference": "750bf031a48fd07c673dbe3f11f72362ea306d0d"
+                "reference": "9185c66c2165bbf4d71de78a69dccf4974f9538d"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/bobthecow/psysh/zipball/750bf031a48fd07c673dbe3f11f72362ea306d0d",
-                "reference": "750bf031a48fd07c673dbe3f11f72362ea306d0d",
+                "url": "https://api.github.com/repos/bobthecow/psysh/zipball/9185c66c2165bbf4d71de78a69dccf4974f9538d",
+                "reference": "9185c66c2165bbf4d71de78a69dccf4974f9538d",
                 "shasum": ""
             },
             "require": {
             ],
             "support": {
                 "issues": "https://github.com/bobthecow/psysh/issues",
-                "source": "https://github.com/bobthecow/psysh/tree/v0.12.0"
+                "source": "https://github.com/bobthecow/psysh/tree/v0.12.2"
             },
-            "time": "2023-12-20T15:28:09+00:00"
+            "time": "2024-03-17T01:53:00+00:00"
         },
         {
             "name": "ralouphie/getallheaders",
         },
         {
             "name": "ramsey/collection",
-            "version": "1.3.0",
+            "version": "2.0.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/ramsey/collection.git",
-                "reference": "ad7475d1c9e70b190ecffc58f2d989416af339b4"
+                "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/ramsey/collection/zipball/ad7475d1c9e70b190ecffc58f2d989416af339b4",
-                "reference": "ad7475d1c9e70b190ecffc58f2d989416af339b4",
+                "url": "https://api.github.com/repos/ramsey/collection/zipball/a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5",
+                "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.4 || ^8.0",
-                "symfony/polyfill-php81": "^1.23"
+                "php": "^8.1"
             },
             "require-dev": {
                 "captainhook/plugin-composer": "^5.3",
             ],
             "support": {
                 "issues": "https://github.com/ramsey/collection/issues",
-                "source": "https://github.com/ramsey/collection/tree/1.3.0"
+                "source": "https://github.com/ramsey/collection/tree/2.0.0"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2022-12-27T19:12:24+00:00"
+            "time": "2022-12-31T21:50:55+00:00"
         },
         {
             "name": "ramsey/uuid",
         },
         {
             "name": "ssddanbrown/symfony-mailer",
-            "version": "6.0.x-dev",
+            "version": "6.4.x-dev",
             "source": {
                 "type": "git",
                 "url": "https://github.com/ssddanbrown/symfony-mailer.git",
-                "reference": "2219dcdc5f58e4f382ce8f1e6942d16982aa3012"
+                "reference": "0497d6eb2734fe22b9550f88ae6526611c9df7ae"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/ssddanbrown/symfony-mailer/zipball/2219dcdc5f58e4f382ce8f1e6942d16982aa3012",
-                "reference": "2219dcdc5f58e4f382ce8f1e6942d16982aa3012",
+                "url": "https://api.github.com/repos/ssddanbrown/symfony-mailer/zipball/0497d6eb2734fe22b9550f88ae6526611c9df7ae",
+                "reference": "0497d6eb2734fe22b9550f88ae6526611c9df7ae",
                 "shasum": ""
             },
             "require": {
                 "egulias/email-validator": "^2.1.10|^3|^4",
-                "php": ">=8.0.2",
+                "php": ">=8.1",
                 "psr/event-dispatcher": "^1",
                 "psr/log": "^1|^2|^3",
-                "symfony/event-dispatcher": "^5.4|^6.0",
-                "symfony/mime": "^5.4|^6.0",
-                "symfony/service-contracts": "^1.1|^2|^3"
+                "symfony/event-dispatcher": "^5.4|^6.0|^7.0",
+                "symfony/mime": "^6.2|^7.0",
+                "symfony/service-contracts": "^2.5|^3"
             },
             "conflict": {
-                "symfony/http-kernel": "<5.4"
+                "symfony/http-client-contracts": "<2.5",
+                "symfony/http-kernel": "<5.4",
+                "symfony/messenger": "<6.2",
+                "symfony/mime": "<6.2",
+                "symfony/twig-bridge": "<6.2.1"
             },
             "replace": {
                 "symfony/mailer": "^6.0"
             },
             "require-dev": {
-                "symfony/http-client-contracts": "^1.1|^2|^3",
-                "symfony/messenger": "^5.4|^6.0"
+                "symfony/console": "^5.4|^6.0|^7.0",
+                "symfony/http-client": "^5.4|^6.0|^7.0",
+                "symfony/messenger": "^6.2|^7.0",
+                "symfony/twig-bridge": "^6.2|^7.0"
             },
-            "default-branch": true,
             "type": "library",
             "autoload": {
                 "psr-4": {
             "description": "Helps sending emails",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/ssddanbrown/symfony-mailer/tree/6.0"
+                "source": "https://github.com/ssddanbrown/symfony-mailer/tree/6.4"
             },
-            "time": "2023-07-04T14:10:33+00:00"
+            "time": "2024-03-17T16:25:21+00:00"
         },
         {
             "name": "symfony/console",
-            "version": "v6.0.19",
+            "version": "v6.4.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/console.git",
-                "reference": "c3ebc83d031b71c39da318ca8b7a07ecc67507ed"
+                "reference": "0d9e4eb5ad413075624378f474c4167ea202de78"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/console/zipball/c3ebc83d031b71c39da318ca8b7a07ecc67507ed",
-                "reference": "c3ebc83d031b71c39da318ca8b7a07ecc67507ed",
+                "url": "https://api.github.com/repos/symfony/console/zipball/0d9e4eb5ad413075624378f474c4167ea202de78",
+                "reference": "0d9e4eb5ad413075624378f474c4167ea202de78",
                 "shasum": ""
             },
             "require": {
-                "php": ">=8.0.2",
+                "php": ">=8.1",
+                "symfony/deprecation-contracts": "^2.5|^3",
                 "symfony/polyfill-mbstring": "~1.0",
-                "symfony/service-contracts": "^1.1|^2|^3",
-                "symfony/string": "^5.4|^6.0"
+                "symfony/service-contracts": "^2.5|^3",
+                "symfony/string": "^5.4|^6.0|^7.0"
             },
             "conflict": {
                 "symfony/dependency-injection": "<5.4",
             },
             "require-dev": {
                 "psr/log": "^1|^2|^3",
-                "symfony/config": "^5.4|^6.0",
-                "symfony/dependency-injection": "^5.4|^6.0",
-                "symfony/event-dispatcher": "^5.4|^6.0",
-                "symfony/lock": "^5.4|^6.0",
-                "symfony/process": "^5.4|^6.0",
-                "symfony/var-dumper": "^5.4|^6.0"
-            },
-            "suggest": {
-                "psr/log": "For using the console logger",
-                "symfony/event-dispatcher": "",
-                "symfony/lock": "",
-                "symfony/process": ""
+                "symfony/config": "^5.4|^6.0|^7.0",
+                "symfony/dependency-injection": "^5.4|^6.0|^7.0",
+                "symfony/event-dispatcher": "^5.4|^6.0|^7.0",
+                "symfony/http-foundation": "^6.4|^7.0",
+                "symfony/http-kernel": "^6.4|^7.0",
+                "symfony/lock": "^5.4|^6.0|^7.0",
+                "symfony/messenger": "^5.4|^6.0|^7.0",
+                "symfony/process": "^5.4|^6.0|^7.0",
+                "symfony/stopwatch": "^5.4|^6.0|^7.0",
+                "symfony/var-dumper": "^5.4|^6.0|^7.0"
             },
             "type": "library",
             "autoload": {
             "homepage": "https://symfony.com",
             "keywords": [
                 "cli",
-                "command line",
+                "command-line",
                 "console",
                 "terminal"
             ],
             "support": {
-                "source": "https://github.com/symfony/console/tree/v6.0.19"
+                "source": "https://github.com/symfony/console/tree/v6.4.4"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2023-01-01T08:36:10+00:00"
+            "time": "2024-02-22T20:27:10+00:00"
         },
         {
             "name": "symfony/css-selector",
-            "version": "v6.0.19",
+            "version": "v6.4.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/css-selector.git",
-                "reference": "f1d00bddb83a4cb2138564b2150001cb6ce272b1"
+                "reference": "ee0f7ed5cf298cc019431bb3b3977ebc52b86229"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/css-selector/zipball/f1d00bddb83a4cb2138564b2150001cb6ce272b1",
-                "reference": "f1d00bddb83a4cb2138564b2150001cb6ce272b1",
+                "url": "https://api.github.com/repos/symfony/css-selector/zipball/ee0f7ed5cf298cc019431bb3b3977ebc52b86229",
+                "reference": "ee0f7ed5cf298cc019431bb3b3977ebc52b86229",
                 "shasum": ""
             },
             "require": {
-                "php": ">=8.0.2"
+                "php": ">=8.1"
             },
             "type": "library",
             "autoload": {
             "description": "Converts CSS selectors to XPath expressions",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/css-selector/tree/v6.0.19"
+                "source": "https://github.com/symfony/css-selector/tree/v6.4.3"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2023-01-01T08:36:10+00:00"
+            "time": "2024-01-23T14:51:35+00:00"
         },
         {
             "name": "symfony/deprecation-contracts",
-            "version": "v3.0.2",
+            "version": "v3.4.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/deprecation-contracts.git",
-                "reference": "26954b3d62a6c5fd0ea8a2a00c0353a14978d05c"
+                "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/26954b3d62a6c5fd0ea8a2a00c0353a14978d05c",
-                "reference": "26954b3d62a6c5fd0ea8a2a00c0353a14978d05c",
+                "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/7c3aff79d10325257a001fcf92d991f24fc967cf",
+                "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf",
                 "shasum": ""
             },
             "require": {
-                "php": ">=8.0.2"
+                "php": ">=8.1"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-main": "3.0-dev"
+                    "dev-main": "3.4-dev"
                 },
                 "thanks": {
                     "name": "symfony/contracts",
             "description": "A generic function and convention to trigger deprecation notices",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/deprecation-contracts/tree/v3.0.2"
+                "source": "https://github.com/symfony/deprecation-contracts/tree/v3.4.0"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2022-01-02T09:55:41+00:00"
+            "time": "2023-05-23T14:45:45+00:00"
         },
         {
             "name": "symfony/error-handler",
-            "version": "v6.0.19",
+            "version": "v6.4.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/error-handler.git",
-                "reference": "c7df52182f43a68522756ac31a532dd5b1e6db67"
+                "reference": "c725219bdf2afc59423c32793d5019d2a904e13a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/error-handler/zipball/c7df52182f43a68522756ac31a532dd5b1e6db67",
-                "reference": "c7df52182f43a68522756ac31a532dd5b1e6db67",
+                "url": "https://api.github.com/repos/symfony/error-handler/zipball/c725219bdf2afc59423c32793d5019d2a904e13a",
+                "reference": "c725219bdf2afc59423c32793d5019d2a904e13a",
                 "shasum": ""
             },
             "require": {
-                "php": ">=8.0.2",
+                "php": ">=8.1",
                 "psr/log": "^1|^2|^3",
-                "symfony/var-dumper": "^5.4|^6.0"
+                "symfony/var-dumper": "^5.4|^6.0|^7.0"
+            },
+            "conflict": {
+                "symfony/deprecation-contracts": "<2.5",
+                "symfony/http-kernel": "<6.4"
             },
             "require-dev": {
-                "symfony/deprecation-contracts": "^2.1|^3",
-                "symfony/http-kernel": "^5.4|^6.0",
-                "symfony/serializer": "^5.4|^6.0"
+                "symfony/deprecation-contracts": "^2.5|^3",
+                "symfony/http-kernel": "^6.4|^7.0",
+                "symfony/serializer": "^5.4|^6.0|^7.0"
             },
             "bin": [
                 "Resources/bin/patch-type-declarations"
             "description": "Provides tools to manage errors and ease debugging PHP code",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/error-handler/tree/v6.0.19"
+                "source": "https://github.com/symfony/error-handler/tree/v6.4.4"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2023-01-01T08:36:10+00:00"
+            "time": "2024-02-22T20:27:10+00:00"
         },
         {
             "name": "symfony/event-dispatcher",
-            "version": "v6.0.19",
+            "version": "v6.4.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/event-dispatcher.git",
-                "reference": "2eaf8e63bc5b8cefabd4a800157f0d0c094f677a"
+                "reference": "ae9d3a6f3003a6caf56acd7466d8d52378d44fef"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/2eaf8e63bc5b8cefabd4a800157f0d0c094f677a",
-                "reference": "2eaf8e63bc5b8cefabd4a800157f0d0c094f677a",
+                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/ae9d3a6f3003a6caf56acd7466d8d52378d44fef",
+                "reference": "ae9d3a6f3003a6caf56acd7466d8d52378d44fef",
                 "shasum": ""
             },
             "require": {
-                "php": ">=8.0.2",
-                "symfony/event-dispatcher-contracts": "^2|^3"
+                "php": ">=8.1",
+                "symfony/event-dispatcher-contracts": "^2.5|^3"
             },
             "conflict": {
-                "symfony/dependency-injection": "<5.4"
+                "symfony/dependency-injection": "<5.4",
+                "symfony/service-contracts": "<2.5"
             },
             "provide": {
                 "psr/event-dispatcher-implementation": "1.0",
             },
             "require-dev": {
                 "psr/log": "^1|^2|^3",
-                "symfony/config": "^5.4|^6.0",
-                "symfony/dependency-injection": "^5.4|^6.0",
-                "symfony/error-handler": "^5.4|^6.0",
-                "symfony/expression-language": "^5.4|^6.0",
-                "symfony/http-foundation": "^5.4|^6.0",
-                "symfony/service-contracts": "^1.1|^2|^3",
-                "symfony/stopwatch": "^5.4|^6.0"
-            },
-            "suggest": {
-                "symfony/dependency-injection": "",
-                "symfony/http-kernel": ""
+                "symfony/config": "^5.4|^6.0|^7.0",
+                "symfony/dependency-injection": "^5.4|^6.0|^7.0",
+                "symfony/error-handler": "^5.4|^6.0|^7.0",
+                "symfony/expression-language": "^5.4|^6.0|^7.0",
+                "symfony/http-foundation": "^5.4|^6.0|^7.0",
+                "symfony/service-contracts": "^2.5|^3",
+                "symfony/stopwatch": "^5.4|^6.0|^7.0"
             },
             "type": "library",
             "autoload": {
             "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/event-dispatcher/tree/v6.0.19"
+                "source": "https://github.com/symfony/event-dispatcher/tree/v6.4.3"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2023-01-01T08:36:10+00:00"
+            "time": "2024-01-23T14:51:35+00:00"
         },
         {
             "name": "symfony/event-dispatcher-contracts",
-            "version": "v3.0.2",
+            "version": "v3.4.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/event-dispatcher-contracts.git",
-                "reference": "7bc61cc2db649b4637d331240c5346dcc7708051"
+                "reference": "a76aed96a42d2b521153fb382d418e30d18b59df"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/7bc61cc2db649b4637d331240c5346dcc7708051",
-                "reference": "7bc61cc2db649b4637d331240c5346dcc7708051",
+                "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/a76aed96a42d2b521153fb382d418e30d18b59df",
+                "reference": "a76aed96a42d2b521153fb382d418e30d18b59df",
                 "shasum": ""
             },
             "require": {
-                "php": ">=8.0.2",
+                "php": ">=8.1",
                 "psr/event-dispatcher": "^1"
             },
-            "suggest": {
-                "symfony/event-dispatcher-implementation": ""
-            },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-main": "3.0-dev"
+                    "dev-main": "3.4-dev"
                 },
                 "thanks": {
                     "name": "symfony/contracts",
                 "standards"
             ],
             "support": {
-                "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.0.2"
+                "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.4.0"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2022-01-02T09:55:41+00:00"
+            "time": "2023-05-23T14:45:45+00:00"
         },
         {
             "name": "symfony/finder",
-            "version": "v6.0.19",
+            "version": "v6.4.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/finder.git",
-                "reference": "5cc9cac6586fc0c28cd173780ca696e419fefa11"
+                "reference": "11d736e97f116ac375a81f96e662911a34cd50ce"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/finder/zipball/5cc9cac6586fc0c28cd173780ca696e419fefa11",
-                "reference": "5cc9cac6586fc0c28cd173780ca696e419fefa11",
+                "url": "https://api.github.com/repos/symfony/finder/zipball/11d736e97f116ac375a81f96e662911a34cd50ce",
+                "reference": "11d736e97f116ac375a81f96e662911a34cd50ce",
                 "shasum": ""
             },
             "require": {
-                "php": ">=8.0.2"
+                "php": ">=8.1"
+            },
+            "require-dev": {
+                "symfony/filesystem": "^6.0|^7.0"
             },
             "type": "library",
             "autoload": {
             "description": "Finds files and directories via an intuitive fluent interface",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/finder/tree/v6.0.19"
+                "source": "https://github.com/symfony/finder/tree/v6.4.0"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2023-01-20T17:44:14+00:00"
+            "time": "2023-10-31T17:30:12+00:00"
         },
         {
             "name": "symfony/http-foundation",
-            "version": "v6.0.20",
+            "version": "v6.4.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/http-foundation.git",
-                "reference": "e16b2676a4b3b1fa12378a20b29c364feda2a8d6"
+                "reference": "ebc713bc6e6f4b53f46539fc158be85dfcd77304"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/http-foundation/zipball/e16b2676a4b3b1fa12378a20b29c364feda2a8d6",
-                "reference": "e16b2676a4b3b1fa12378a20b29c364feda2a8d6",
+                "url": "https://api.github.com/repos/symfony/http-foundation/zipball/ebc713bc6e6f4b53f46539fc158be85dfcd77304",
+                "reference": "ebc713bc6e6f4b53f46539fc158be85dfcd77304",
                 "shasum": ""
             },
             "require": {
-                "php": ">=8.0.2",
-                "symfony/deprecation-contracts": "^2.1|^3",
-                "symfony/polyfill-mbstring": "~1.1"
+                "php": ">=8.1",
+                "symfony/deprecation-contracts": "^2.5|^3",
+                "symfony/polyfill-mbstring": "~1.1",
+                "symfony/polyfill-php83": "^1.27"
             },
-            "require-dev": {
-                "predis/predis": "~1.0",
-                "symfony/cache": "^5.4|^6.0",
-                "symfony/dependency-injection": "^5.4|^6.0",
-                "symfony/expression-language": "^5.4|^6.0",
-                "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4",
-                "symfony/mime": "^5.4|^6.0",
-                "symfony/rate-limiter": "^5.2|^6.0"
+            "conflict": {
+                "symfony/cache": "<6.3"
             },
-            "suggest": {
-                "symfony/mime": "To use the file extension guesser"
+            "require-dev": {
+                "doctrine/dbal": "^2.13.1|^3|^4",
+                "predis/predis": "^1.1|^2.0",
+                "symfony/cache": "^6.3|^7.0",
+                "symfony/dependency-injection": "^5.4|^6.0|^7.0",
+                "symfony/expression-language": "^5.4|^6.0|^7.0",
+                "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4|^7.0",
+                "symfony/mime": "^5.4|^6.0|^7.0",
+                "symfony/rate-limiter": "^5.4|^6.0|^7.0"
             },
             "type": "library",
             "autoload": {
             "description": "Defines an object-oriented layer for the HTTP specification",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/http-foundation/tree/v6.0.20"
+                "source": "https://github.com/symfony/http-foundation/tree/v6.4.4"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2023-01-30T15:41:07+00:00"
+            "time": "2024-02-08T15:01:18+00:00"
         },
         {
             "name": "symfony/http-kernel",
-            "version": "v6.0.20",
+            "version": "v6.4.5",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/http-kernel.git",
-                "reference": "6dc70833fd0ef5e861e17c7854c12d7d86679349"
+                "reference": "f6947cb939d8efee137797382cb4db1af653ef75"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/http-kernel/zipball/6dc70833fd0ef5e861e17c7854c12d7d86679349",
-                "reference": "6dc70833fd0ef5e861e17c7854c12d7d86679349",
+                "url": "https://api.github.com/repos/symfony/http-kernel/zipball/f6947cb939d8efee137797382cb4db1af653ef75",
+                "reference": "f6947cb939d8efee137797382cb4db1af653ef75",
                 "shasum": ""
             },
             "require": {
-                "php": ">=8.0.2",
+                "php": ">=8.1",
                 "psr/log": "^1|^2|^3",
-                "symfony/error-handler": "^5.4|^6.0",
-                "symfony/event-dispatcher": "^5.4|^6.0",
-                "symfony/http-foundation": "^5.4|^6.0",
+                "symfony/deprecation-contracts": "^2.5|^3",
+                "symfony/error-handler": "^6.4|^7.0",
+                "symfony/event-dispatcher": "^5.4|^6.0|^7.0",
+                "symfony/http-foundation": "^6.4|^7.0",
                 "symfony/polyfill-ctype": "^1.8"
             },
             "conflict": {
                 "symfony/browser-kit": "<5.4",
                 "symfony/cache": "<5.4",
-                "symfony/config": "<5.4",
+                "symfony/config": "<6.1",
                 "symfony/console": "<5.4",
-                "symfony/dependency-injection": "<5.4",
+                "symfony/dependency-injection": "<6.4",
                 "symfony/doctrine-bridge": "<5.4",
                 "symfony/form": "<5.4",
                 "symfony/http-client": "<5.4",
+                "symfony/http-client-contracts": "<2.5",
                 "symfony/mailer": "<5.4",
                 "symfony/messenger": "<5.4",
                 "symfony/translation": "<5.4",
+                "symfony/translation-contracts": "<2.5",
                 "symfony/twig-bridge": "<5.4",
-                "symfony/validator": "<5.4",
+                "symfony/validator": "<6.4",
+                "symfony/var-dumper": "<6.3",
                 "twig/twig": "<2.13"
             },
             "provide": {
             },
             "require-dev": {
                 "psr/cache": "^1.0|^2.0|^3.0",
-                "symfony/browser-kit": "^5.4|^6.0",
-                "symfony/config": "^5.4|^6.0",
-                "symfony/console": "^5.4|^6.0",
-                "symfony/css-selector": "^5.4|^6.0",
-                "symfony/dependency-injection": "^5.4|^6.0",
-                "symfony/dom-crawler": "^5.4|^6.0",
-                "symfony/expression-language": "^5.4|^6.0",
-                "symfony/finder": "^5.4|^6.0",
-                "symfony/http-client-contracts": "^1.1|^2|^3",
-                "symfony/process": "^5.4|^6.0",
-                "symfony/routing": "^5.4|^6.0",
-                "symfony/stopwatch": "^5.4|^6.0",
-                "symfony/translation": "^5.4|^6.0",
-                "symfony/translation-contracts": "^1.1|^2|^3",
+                "symfony/browser-kit": "^5.4|^6.0|^7.0",
+                "symfony/clock": "^6.2|^7.0",
+                "symfony/config": "^6.1|^7.0",
+                "symfony/console": "^5.4|^6.0|^7.0",
+                "symfony/css-selector": "^5.4|^6.0|^7.0",
+                "symfony/dependency-injection": "^6.4|^7.0",
+                "symfony/dom-crawler": "^5.4|^6.0|^7.0",
+                "symfony/expression-language": "^5.4|^6.0|^7.0",
+                "symfony/finder": "^5.4|^6.0|^7.0",
+                "symfony/http-client-contracts": "^2.5|^3",
+                "symfony/process": "^5.4|^6.0|^7.0",
+                "symfony/property-access": "^5.4.5|^6.0.5|^7.0",
+                "symfony/routing": "^5.4|^6.0|^7.0",
+                "symfony/serializer": "^6.4.4|^7.0.4",
+                "symfony/stopwatch": "^5.4|^6.0|^7.0",
+                "symfony/translation": "^5.4|^6.0|^7.0",
+                "symfony/translation-contracts": "^2.5|^3",
+                "symfony/uid": "^5.4|^6.0|^7.0",
+                "symfony/validator": "^6.4|^7.0",
+                "symfony/var-exporter": "^6.2|^7.0",
                 "twig/twig": "^2.13|^3.0.4"
             },
-            "suggest": {
-                "symfony/browser-kit": "",
-                "symfony/config": "",
-                "symfony/console": "",
-                "symfony/dependency-injection": ""
-            },
             "type": "library",
             "autoload": {
                 "psr-4": {
             "description": "Provides a structured process for converting a Request into a Response",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/http-kernel/tree/v6.0.20"
+                "source": "https://github.com/symfony/http-kernel/tree/v6.4.5"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2023-02-01T08:22:55+00:00"
+            "time": "2024-03-04T21:00:47+00:00"
         },
         {
             "name": "symfony/mime",
-            "version": "v6.0.19",
+            "version": "v6.4.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/mime.git",
-                "reference": "d7052547a0070cbeadd474e172b527a00d657301"
+                "reference": "5017e0a9398c77090b7694be46f20eb796262a34"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/mime/zipball/d7052547a0070cbeadd474e172b527a00d657301",
-                "reference": "d7052547a0070cbeadd474e172b527a00d657301",
+                "url": "https://api.github.com/repos/symfony/mime/zipball/5017e0a9398c77090b7694be46f20eb796262a34",
+                "reference": "5017e0a9398c77090b7694be46f20eb796262a34",
                 "shasum": ""
             },
             "require": {
-                "php": ">=8.0.2",
+                "php": ">=8.1",
+                "symfony/deprecation-contracts": "^2.5|^3",
                 "symfony/polyfill-intl-idn": "^1.10",
                 "symfony/polyfill-mbstring": "^1.0"
             },
                 "phpdocumentor/reflection-docblock": "<3.2.2",
                 "phpdocumentor/type-resolver": "<1.4.0",
                 "symfony/mailer": "<5.4",
-                "symfony/serializer": "<5.4.14|>=6.0,<6.0.14|>=6.1,<6.1.6"
+                "symfony/serializer": "<6.3.2"
             },
             "require-dev": {
                 "egulias/email-validator": "^2.1.10|^3.1|^4",
+                "league/html-to-markdown": "^5.0",
                 "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0",
-                "symfony/dependency-injection": "^5.4|^6.0",
-                "symfony/property-access": "^5.4|^6.0",
-                "symfony/property-info": "^5.4|^6.0",
-                "symfony/serializer": "^5.4.14|~6.0.14|^6.1.6"
+                "symfony/dependency-injection": "^5.4|^6.0|^7.0",
+                "symfony/property-access": "^5.4|^6.0|^7.0",
+                "symfony/property-info": "^5.4|^6.0|^7.0",
+                "symfony/serializer": "^6.3.2|^7.0"
             },
             "type": "library",
             "autoload": {
                 "mime-type"
             ],
             "support": {
-                "source": "https://github.com/symfony/mime/tree/v6.0.19"
+                "source": "https://github.com/symfony/mime/tree/v6.4.3"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2023-01-11T11:50:03+00:00"
+            "time": "2024-01-30T08:32:12+00:00"
         },
         {
             "name": "symfony/polyfill-ctype",
             "time": "2024-01-29T20:11:03+00:00"
         },
         {
-            "name": "symfony/polyfill-php81",
+            "name": "symfony/polyfill-php83",
             "version": "v1.29.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/polyfill-php81.git",
-                "reference": "c565ad1e63f30e7477fc40738343c62b40bc672d"
+                "url": "https://github.com/symfony/polyfill-php83.git",
+                "reference": "86fcae159633351e5fd145d1c47de6c528f8caff"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/c565ad1e63f30e7477fc40738343c62b40bc672d",
-                "reference": "c565ad1e63f30e7477fc40738343c62b40bc672d",
+                "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/86fcae159633351e5fd145d1c47de6c528f8caff",
+                "reference": "86fcae159633351e5fd145d1c47de6c528f8caff",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.1"
+                "php": ">=7.1",
+                "symfony/polyfill-php80": "^1.14"
             },
             "type": "library",
             "extra": {
                     "bootstrap.php"
                 ],
                 "psr-4": {
-                    "Symfony\\Polyfill\\Php81\\": ""
+                    "Symfony\\Polyfill\\Php83\\": ""
                 },
                 "classmap": [
                     "Resources/stubs"
                     "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions",
+            "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions",
             "homepage": "https://symfony.com",
             "keywords": [
                 "compatibility",
                 "shim"
             ],
             "support": {
-                "source": "https://github.com/symfony/polyfill-php81/tree/v1.29.0"
+                "source": "https://github.com/symfony/polyfill-php83/tree/v1.29.0"
             },
             "funding": [
                 {
         },
         {
             "name": "symfony/process",
-            "version": "v6.0.19",
+            "version": "v6.4.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/process.git",
-                "reference": "2114fd60f26a296cc403a7939ab91478475a33d4"
+                "reference": "710e27879e9be3395de2b98da3f52a946039f297"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/process/zipball/2114fd60f26a296cc403a7939ab91478475a33d4",
-                "reference": "2114fd60f26a296cc403a7939ab91478475a33d4",
+                "url": "https://api.github.com/repos/symfony/process/zipball/710e27879e9be3395de2b98da3f52a946039f297",
+                "reference": "710e27879e9be3395de2b98da3f52a946039f297",
                 "shasum": ""
             },
             "require": {
-                "php": ">=8.0.2"
+                "php": ">=8.1"
             },
             "type": "library",
             "autoload": {
             "description": "Executes commands in sub-processes",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/process/tree/v6.0.19"
+                "source": "https://github.com/symfony/process/tree/v6.4.4"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2023-01-01T08:36:10+00:00"
+            "time": "2024-02-20T12:31:00+00:00"
         },
         {
             "name": "symfony/routing",
-            "version": "v6.0.19",
+            "version": "v6.4.5",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/routing.git",
-                "reference": "e56ca9b41c1ec447193474cd86ad7c0b547755ac"
+                "reference": "7fe30068e207d9c31c0138501ab40358eb2d49a4"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/routing/zipball/e56ca9b41c1ec447193474cd86ad7c0b547755ac",
-                "reference": "e56ca9b41c1ec447193474cd86ad7c0b547755ac",
+                "url": "https://api.github.com/repos/symfony/routing/zipball/7fe30068e207d9c31c0138501ab40358eb2d49a4",
+                "reference": "7fe30068e207d9c31c0138501ab40358eb2d49a4",
                 "shasum": ""
             },
             "require": {
-                "php": ">=8.0.2"
+                "php": ">=8.1",
+                "symfony/deprecation-contracts": "^2.5|^3"
             },
             "conflict": {
                 "doctrine/annotations": "<1.12",
-                "symfony/config": "<5.4",
+                "symfony/config": "<6.2",
                 "symfony/dependency-injection": "<5.4",
                 "symfony/yaml": "<5.4"
             },
             "require-dev": {
                 "doctrine/annotations": "^1.12|^2",
                 "psr/log": "^1|^2|^3",
-                "symfony/config": "^5.4|^6.0",
-                "symfony/dependency-injection": "^5.4|^6.0",
-                "symfony/expression-language": "^5.4|^6.0",
-                "symfony/http-foundation": "^5.4|^6.0",
-                "symfony/yaml": "^5.4|^6.0"
-            },
-            "suggest": {
-                "symfony/config": "For using the all-in-one router or any loader",
-                "symfony/expression-language": "For using expression matching",
-                "symfony/http-foundation": "For using a Symfony Request object",
-                "symfony/yaml": "For using the YAML loader"
+                "symfony/config": "^6.2|^7.0",
+                "symfony/dependency-injection": "^5.4|^6.0|^7.0",
+                "symfony/expression-language": "^5.4|^6.0|^7.0",
+                "symfony/http-foundation": "^5.4|^6.0|^7.0",
+                "symfony/yaml": "^5.4|^6.0|^7.0"
             },
             "type": "library",
             "autoload": {
                 "url"
             ],
             "support": {
-                "source": "https://github.com/symfony/routing/tree/v6.0.19"
+                "source": "https://github.com/symfony/routing/tree/v6.4.5"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2023-01-01T08:36:10+00:00"
+            "time": "2024-02-27T12:33:30+00:00"
         },
         {
             "name": "symfony/service-contracts",
-            "version": "v3.0.2",
+            "version": "v3.4.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/service-contracts.git",
-                "reference": "d78d39c1599bd1188b8e26bb341da52c3c6d8a66"
+                "reference": "fe07cbc8d837f60caf7018068e350cc5163681a0"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/service-contracts/zipball/d78d39c1599bd1188b8e26bb341da52c3c6d8a66",
-                "reference": "d78d39c1599bd1188b8e26bb341da52c3c6d8a66",
+                "url": "https://api.github.com/repos/symfony/service-contracts/zipball/fe07cbc8d837f60caf7018068e350cc5163681a0",
+                "reference": "fe07cbc8d837f60caf7018068e350cc5163681a0",
                 "shasum": ""
             },
             "require": {
-                "php": ">=8.0.2",
-                "psr/container": "^2.0"
+                "php": ">=8.1",
+                "psr/container": "^1.1|^2.0"
             },
             "conflict": {
                 "ext-psr": "<1.1|>=2"
             },
-            "suggest": {
-                "symfony/service-implementation": ""
-            },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-main": "3.0-dev"
+                    "dev-main": "3.4-dev"
                 },
                 "thanks": {
                     "name": "symfony/contracts",
             "autoload": {
                 "psr-4": {
                     "Symfony\\Contracts\\Service\\": ""
-                }
+                },
+                "exclude-from-classmap": [
+                    "/Test/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
                 "standards"
             ],
             "support": {
-                "source": "https://github.com/symfony/service-contracts/tree/v3.0.2"
+                "source": "https://github.com/symfony/service-contracts/tree/v3.4.1"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2022-05-30T19:17:58+00:00"
+            "time": "2023-12-26T14:02:43+00:00"
         },
         {
             "name": "symfony/string",
-            "version": "v6.0.19",
+            "version": "v6.4.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/string.git",
-                "reference": "d9e72497367c23e08bf94176d2be45b00a9d232a"
+                "reference": "4e465a95bdc32f49cf4c7f07f751b843bbd6dcd9"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/string/zipball/d9e72497367c23e08bf94176d2be45b00a9d232a",
-                "reference": "d9e72497367c23e08bf94176d2be45b00a9d232a",
+                "url": "https://api.github.com/repos/symfony/string/zipball/4e465a95bdc32f49cf4c7f07f751b843bbd6dcd9",
+                "reference": "4e465a95bdc32f49cf4c7f07f751b843bbd6dcd9",
                 "shasum": ""
             },
             "require": {
-                "php": ">=8.0.2",
+                "php": ">=8.1",
                 "symfony/polyfill-ctype": "~1.8",
                 "symfony/polyfill-intl-grapheme": "~1.0",
                 "symfony/polyfill-intl-normalizer": "~1.0",
                 "symfony/polyfill-mbstring": "~1.0"
             },
             "conflict": {
-                "symfony/translation-contracts": "<2.0"
+                "symfony/translation-contracts": "<2.5"
             },
             "require-dev": {
-                "symfony/error-handler": "^5.4|^6.0",
-                "symfony/http-client": "^5.4|^6.0",
-                "symfony/translation-contracts": "^2.0|^3.0",
-                "symfony/var-exporter": "^5.4|^6.0"
+                "symfony/error-handler": "^5.4|^6.0|^7.0",
+                "symfony/http-client": "^5.4|^6.0|^7.0",
+                "symfony/intl": "^6.2|^7.0",
+                "symfony/translation-contracts": "^2.5|^3.0",
+                "symfony/var-exporter": "^5.4|^6.0|^7.0"
             },
             "type": "library",
             "autoload": {
                 "utf8"
             ],
             "support": {
-                "source": "https://github.com/symfony/string/tree/v6.0.19"
+                "source": "https://github.com/symfony/string/tree/v6.4.4"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2023-01-01T08:36:10+00:00"
+            "time": "2024-02-01T13:16:41+00:00"
         },
         {
             "name": "symfony/translation",
-            "version": "v6.0.19",
+            "version": "v6.4.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/translation.git",
-                "reference": "9c24b3fdbbe9fb2ef3a6afd8bbaadfd72dad681f"
+                "reference": "bce6a5a78e94566641b2594d17e48b0da3184a8e"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/translation/zipball/9c24b3fdbbe9fb2ef3a6afd8bbaadfd72dad681f",
-                "reference": "9c24b3fdbbe9fb2ef3a6afd8bbaadfd72dad681f",
+                "url": "https://api.github.com/repos/symfony/translation/zipball/bce6a5a78e94566641b2594d17e48b0da3184a8e",
+                "reference": "bce6a5a78e94566641b2594d17e48b0da3184a8e",
                 "shasum": ""
             },
             "require": {
-                "php": ">=8.0.2",
+                "php": ">=8.1",
+                "symfony/deprecation-contracts": "^2.5|^3",
                 "symfony/polyfill-mbstring": "~1.0",
-                "symfony/translation-contracts": "^2.3|^3.0"
+                "symfony/translation-contracts": "^2.5|^3.0"
             },
             "conflict": {
                 "symfony/config": "<5.4",
                 "symfony/console": "<5.4",
                 "symfony/dependency-injection": "<5.4",
+                "symfony/http-client-contracts": "<2.5",
                 "symfony/http-kernel": "<5.4",
+                "symfony/service-contracts": "<2.5",
                 "symfony/twig-bundle": "<5.4",
                 "symfony/yaml": "<5.4"
             },
                 "symfony/translation-implementation": "2.3|3.0"
             },
             "require-dev": {
+                "nikic/php-parser": "^4.18|^5.0",
                 "psr/log": "^1|^2|^3",
-                "symfony/config": "^5.4|^6.0",
-                "symfony/console": "^5.4|^6.0",
-                "symfony/dependency-injection": "^5.4|^6.0",
-                "symfony/finder": "^5.4|^6.0",
-                "symfony/http-client-contracts": "^1.1|^2.0|^3.0",
-                "symfony/http-kernel": "^5.4|^6.0",
-                "symfony/intl": "^5.4|^6.0",
+                "symfony/config": "^5.4|^6.0|^7.0",
+                "symfony/console": "^5.4|^6.0|^7.0",
+                "symfony/dependency-injection": "^5.4|^6.0|^7.0",
+                "symfony/finder": "^5.4|^6.0|^7.0",
+                "symfony/http-client-contracts": "^2.5|^3.0",
+                "symfony/http-kernel": "^5.4|^6.0|^7.0",
+                "symfony/intl": "^5.4|^6.0|^7.0",
                 "symfony/polyfill-intl-icu": "^1.21",
-                "symfony/service-contracts": "^1.1.2|^2|^3",
-                "symfony/yaml": "^5.4|^6.0"
-            },
-            "suggest": {
-                "psr/log-implementation": "To use logging capability in translator",
-                "symfony/config": "",
-                "symfony/yaml": ""
+                "symfony/routing": "^5.4|^6.0|^7.0",
+                "symfony/service-contracts": "^2.5|^3",
+                "symfony/yaml": "^5.4|^6.0|^7.0"
             },
             "type": "library",
             "autoload": {
             "description": "Provides tools to internationalize your application",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/translation/tree/v6.0.19"
+                "source": "https://github.com/symfony/translation/tree/v6.4.4"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2023-01-01T08:36:10+00:00"
+            "time": "2024-02-20T13:16:58+00:00"
         },
         {
             "name": "symfony/translation-contracts",
-            "version": "v3.0.2",
+            "version": "v3.4.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/translation-contracts.git",
-                "reference": "acbfbb274e730e5a0236f619b6168d9dedb3e282"
+                "reference": "06450585bf65e978026bda220cdebca3f867fde7"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/acbfbb274e730e5a0236f619b6168d9dedb3e282",
-                "reference": "acbfbb274e730e5a0236f619b6168d9dedb3e282",
+                "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/06450585bf65e978026bda220cdebca3f867fde7",
+                "reference": "06450585bf65e978026bda220cdebca3f867fde7",
                 "shasum": ""
             },
             "require": {
-                "php": ">=8.0.2"
-            },
-            "suggest": {
-                "symfony/translation-implementation": ""
+                "php": ">=8.1"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-main": "3.0-dev"
+                    "dev-main": "3.4-dev"
                 },
                 "thanks": {
                     "name": "symfony/contracts",
             "autoload": {
                 "psr-4": {
                     "Symfony\\Contracts\\Translation\\": ""
-                }
+                },
+                "exclude-from-classmap": [
+                    "/Test/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
                 "standards"
             ],
             "support": {
-                "source": "https://github.com/symfony/translation-contracts/tree/v3.0.2"
+                "source": "https://github.com/symfony/translation-contracts/tree/v3.4.1"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2022-06-27T17:10:44+00:00"
+            "time": "2023-12-26T14:02:43+00:00"
         },
         {
             "name": "symfony/uid",
-            "version": "v6.0.19",
+            "version": "v6.4.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/uid.git",
-                "reference": "6499e28b0ac9f2aa3151e11845bdb5cd21e6bb9d"
+                "reference": "1d31267211cc3a2fff32bcfc7c1818dac41b6fc0"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/uid/zipball/6499e28b0ac9f2aa3151e11845bdb5cd21e6bb9d",
-                "reference": "6499e28b0ac9f2aa3151e11845bdb5cd21e6bb9d",
+                "url": "https://api.github.com/repos/symfony/uid/zipball/1d31267211cc3a2fff32bcfc7c1818dac41b6fc0",
+                "reference": "1d31267211cc3a2fff32bcfc7c1818dac41b6fc0",
                 "shasum": ""
             },
             "require": {
-                "php": ">=8.0.2",
+                "php": ">=8.1",
                 "symfony/polyfill-uuid": "^1.15"
             },
             "require-dev": {
-                "symfony/console": "^5.4|^6.0"
+                "symfony/console": "^5.4|^6.0|^7.0"
             },
             "type": "library",
             "autoload": {
                 "uuid"
             ],
             "support": {
-                "source": "https://github.com/symfony/uid/tree/v6.0.19"
+                "source": "https://github.com/symfony/uid/tree/v6.4.3"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2023-01-01T08:36:10+00:00"
+            "time": "2024-01-23T14:51:35+00:00"
         },
         {
             "name": "symfony/var-dumper",
-            "version": "v6.0.19",
+            "version": "v6.4.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/var-dumper.git",
-                "reference": "eb980457fa6899840fe1687e8627a03a7d8a3d52"
+                "reference": "b439823f04c98b84d4366c79507e9da6230944b1"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/var-dumper/zipball/eb980457fa6899840fe1687e8627a03a7d8a3d52",
-                "reference": "eb980457fa6899840fe1687e8627a03a7d8a3d52",
+                "url": "https://api.github.com/repos/symfony/var-dumper/zipball/b439823f04c98b84d4366c79507e9da6230944b1",
+                "reference": "b439823f04c98b84d4366c79507e9da6230944b1",
                 "shasum": ""
             },
             "require": {
-                "php": ">=8.0.2",
+                "php": ">=8.1",
+                "symfony/deprecation-contracts": "^2.5|^3",
                 "symfony/polyfill-mbstring": "~1.0"
             },
             "conflict": {
-                "phpunit/phpunit": "<5.4.3",
                 "symfony/console": "<5.4"
             },
             "require-dev": {
                 "ext-iconv": "*",
-                "symfony/console": "^5.4|^6.0",
-                "symfony/process": "^5.4|^6.0",
-                "symfony/uid": "^5.4|^6.0",
+                "symfony/console": "^5.4|^6.0|^7.0",
+                "symfony/error-handler": "^6.3|^7.0",
+                "symfony/http-kernel": "^5.4|^6.0|^7.0",
+                "symfony/process": "^5.4|^6.0|^7.0",
+                "symfony/uid": "^5.4|^6.0|^7.0",
                 "twig/twig": "^2.13|^3.0.4"
             },
-            "suggest": {
-                "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).",
-                "ext-intl": "To show region name in time zone dump",
-                "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script"
-            },
             "bin": [
                 "Resources/bin/var-dump-server"
             ],
                 "dump"
             ],
             "support": {
-                "source": "https://github.com/symfony/var-dumper/tree/v6.0.19"
+                "source": "https://github.com/symfony/var-dumper/tree/v6.4.4"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2023-01-20T17:44:14+00:00"
+            "time": "2024-02-15T11:23:52+00:00"
         },
         {
             "name": "tijsverkoyen/css-to-inline-styles",
         }
     ],
     "packages-dev": [
-        {
-            "name": "doctrine/instantiator",
-            "version": "1.5.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/doctrine/instantiator.git",
-                "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/instantiator/zipball/0a0fa9780f5d4e507415a065172d26a98d02047b",
-                "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.1 || ^8.0"
-            },
-            "require-dev": {
-                "doctrine/coding-standard": "^9 || ^11",
-                "ext-pdo": "*",
-                "ext-phar": "*",
-                "phpbench/phpbench": "^0.16 || ^1",
-                "phpstan/phpstan": "^1.4",
-                "phpstan/phpstan-phpunit": "^1",
-                "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
-                "vimeo/psalm": "^4.30 || ^5.4"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Marco Pivetta",
-                    "email": "[email protected]",
-                    "homepage": "https://ocramius.github.io/"
-                }
-            ],
-            "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
-            "homepage": "https://www.doctrine-project.org/projects/instantiator.html",
-            "keywords": [
-                "constructor",
-                "instantiate"
-            ],
-            "support": {
-                "issues": "https://github.com/doctrine/instantiator/issues",
-                "source": "https://github.com/doctrine/instantiator/tree/1.5.0"
-            },
-            "funding": [
-                {
-                    "url": "https://www.doctrine-project.org/sponsorship.html",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://www.patreon.com/phpdoctrine",
-                    "type": "patreon"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2022-12-30T00:15:36+00:00"
-        },
         {
             "name": "fakerphp/faker",
             "version": "v1.23.1",
         },
         {
             "name": "larastan/larastan",
-            "version": "v2.9.1",
+            "version": "v2.9.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/larastan/larastan.git",
-                "reference": "467113c58d110ad617cf9e07ff49b0948d1c03cc"
+                "reference": "a79b46b96060504b400890674b83f66aa7f5db6d"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/larastan/larastan/zipball/467113c58d110ad617cf9e07ff49b0948d1c03cc",
-                "reference": "467113c58d110ad617cf9e07ff49b0948d1c03cc",
+                "url": "https://api.github.com/repos/larastan/larastan/zipball/a79b46b96060504b400890674b83f66aa7f5db6d",
+                "reference": "a79b46b96060504b400890674b83f66aa7f5db6d",
                 "shasum": ""
             },
             "require": {
                 "phpstan/phpstan": "^1.10.50"
             },
             "require-dev": {
+                "doctrine/coding-standard": "^12.0",
                 "nikic/php-parser": "^4.17.1",
                 "orchestra/canvas": "^7.11.1 || ^8.11.0 || ^9.0.0",
                 "orchestra/testbench": "^7.33.0 || ^8.13.0 || ^9.0.0",
             ],
             "support": {
                 "issues": "https://github.com/larastan/larastan/issues",
-                "source": "https://github.com/larastan/larastan/tree/v2.9.1"
+                "source": "https://github.com/larastan/larastan/tree/v2.9.2"
             },
             "funding": [
                 {
                     "type": "patreon"
                 }
             ],
-            "time": "2024-02-26T14:10:20+00:00"
+            "time": "2024-02-27T03:16:03+00:00"
         },
         {
             "name": "mockery/mockery",
-            "version": "1.6.7",
+            "version": "1.6.9",
             "source": {
                 "type": "git",
                 "url": "https://github.com/mockery/mockery.git",
         },
         {
             "name": "nunomaduro/collision",
-            "version": "v6.4.0",
+            "version": "v7.10.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/nunomaduro/collision.git",
-                "reference": "f05978827b9343cba381ca05b8c7deee346b6015"
+                "reference": "49ec67fa7b002712da8526678abd651c09f375b2"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/nunomaduro/collision/zipball/f05978827b9343cba381ca05b8c7deee346b6015",
-                "reference": "f05978827b9343cba381ca05b8c7deee346b6015",
+                "url": "https://api.github.com/repos/nunomaduro/collision/zipball/49ec67fa7b002712da8526678abd651c09f375b2",
+                "reference": "49ec67fa7b002712da8526678abd651c09f375b2",
                 "shasum": ""
             },
             "require": {
-                "filp/whoops": "^2.14.5",
-                "php": "^8.0.0",
-                "symfony/console": "^6.0.2"
+                "filp/whoops": "^2.15.3",
+                "nunomaduro/termwind": "^1.15.1",
+                "php": "^8.1.0",
+                "symfony/console": "^6.3.4"
+            },
+            "conflict": {
+                "laravel/framework": ">=11.0.0"
             },
             "require-dev": {
-                "brianium/paratest": "^6.4.1",
-                "laravel/framework": "^9.26.1",
-                "laravel/pint": "^1.1.1",
-                "nunomaduro/larastan": "^1.0.3",
-                "nunomaduro/mock-final-classes": "^1.1.0",
-                "orchestra/testbench": "^7.7",
-                "phpunit/phpunit": "^9.5.23",
-                "spatie/ignition": "^1.4.1"
+                "brianium/paratest": "^7.3.0",
+                "laravel/framework": "^10.28.0",
+                "laravel/pint": "^1.13.3",
+                "laravel/sail": "^1.25.0",
+                "laravel/sanctum": "^3.3.1",
+                "laravel/tinker": "^2.8.2",
+                "nunomaduro/larastan": "^2.6.4",
+                "orchestra/testbench-core": "^8.13.0",
+                "pestphp/pest": "^2.23.2",
+                "phpunit/phpunit": "^10.4.1",
+                "sebastian/environment": "^6.0.1",
+                "spatie/laravel-ignition": "^2.3.1"
             },
             "type": "library",
             "extra": {
-                "branch-alias": {
-                    "dev-develop": "6.x-dev"
-                },
                 "laravel": {
                     "providers": [
                         "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider"
                 }
             },
             "autoload": {
+                "files": [
+                    "./src/Adapters/Phpunit/Autoload.php"
+                ],
                 "psr-4": {
                     "NunoMaduro\\Collision\\": "src/"
                 }
                     "type": "patreon"
                 }
             ],
-            "time": "2023-01-03T12:54:54+00:00"
+            "time": "2023-10-11T15:45:01+00:00"
         },
         {
             "name": "phar-io/manifest",
-            "version": "2.0.3",
+            "version": "2.0.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phar-io/manifest.git",
-                "reference": "97803eca37d319dfa7826cc2437fc020857acb53"
+                "reference": "54750ef60c58e43759730615a392c31c80e23176"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53",
-                "reference": "97803eca37d319dfa7826cc2437fc020857acb53",
+                "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176",
+                "reference": "54750ef60c58e43759730615a392c31c80e23176",
                 "shasum": ""
             },
             "require": {
                 "ext-dom": "*",
+                "ext-libxml": "*",
                 "ext-phar": "*",
                 "ext-xmlwriter": "*",
                 "phar-io/version": "^3.0.1",
             "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)",
             "support": {
                 "issues": "https://github.com/phar-io/manifest/issues",
-                "source": "https://github.com/phar-io/manifest/tree/2.0.3"
+                "source": "https://github.com/phar-io/manifest/tree/2.0.4"
             },
-            "time": "2021-07-20T11:28:43+00:00"
+            "funding": [
+                {
+                    "url": "https://github.com/theseer",
+                    "type": "github"
+                }
+            ],
+            "time": "2024-03-03T12:33:53+00:00"
         },
         {
             "name": "phar-io/version",
         },
         {
             "name": "phpstan/phpstan",
-            "version": "1.10.59",
+            "version": "1.10.62",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpstan/phpstan.git",
-                "reference": "e607609388d3a6d418a50a49f7940e8086798281"
+                "reference": "cd5c8a1660ed3540b211407c77abf4af193a6af9"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/e607609388d3a6d418a50a49f7940e8086798281",
-                "reference": "e607609388d3a6d418a50a49f7940e8086798281",
+                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/cd5c8a1660ed3540b211407c77abf4af193a6af9",
+                "reference": "cd5c8a1660ed3540b211407c77abf4af193a6af9",
                 "shasum": ""
             },
             "require": {
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-02-20T13:59:13+00:00"
+            "time": "2024-03-13T12:27:20+00:00"
         },
         {
             "name": "phpunit/php-code-coverage",
-            "version": "9.2.30",
+            "version": "10.1.14",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
-                "reference": "ca2bd87d2f9215904682a9cb9bb37dda98e76089"
+                "reference": "e3f51450ebffe8e0efdf7346ae966a656f7d5e5b"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/ca2bd87d2f9215904682a9cb9bb37dda98e76089",
-                "reference": "ca2bd87d2f9215904682a9cb9bb37dda98e76089",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/e3f51450ebffe8e0efdf7346ae966a656f7d5e5b",
+                "reference": "e3f51450ebffe8e0efdf7346ae966a656f7d5e5b",
                 "shasum": ""
             },
             "require": {
                 "ext-libxml": "*",
                 "ext-xmlwriter": "*",
                 "nikic/php-parser": "^4.18 || ^5.0",
-                "php": ">=7.3",
-                "phpunit/php-file-iterator": "^3.0.3",
-                "phpunit/php-text-template": "^2.0.2",
-                "sebastian/code-unit-reverse-lookup": "^2.0.2",
-                "sebastian/complexity": "^2.0",
-                "sebastian/environment": "^5.1.2",
-                "sebastian/lines-of-code": "^1.0.3",
-                "sebastian/version": "^3.0.1",
+                "php": ">=8.1",
+                "phpunit/php-file-iterator": "^4.0",
+                "phpunit/php-text-template": "^3.0",
+                "sebastian/code-unit-reverse-lookup": "^3.0",
+                "sebastian/complexity": "^3.0",
+                "sebastian/environment": "^6.0",
+                "sebastian/lines-of-code": "^2.0",
+                "sebastian/version": "^4.0",
                 "theseer/tokenizer": "^1.2.0"
             },
             "require-dev": {
-                "phpunit/phpunit": "^9.3"
+                "phpunit/phpunit": "^10.1"
             },
             "suggest": {
                 "ext-pcov": "PHP extension that provides line coverage",
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "9.2-dev"
+                    "dev-main": "10.1-dev"
                 }
             },
             "autoload": {
             "support": {
                 "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
                 "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy",
-                "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.30"
+                "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.14"
             },
             "funding": [
                 {
                     "type": "github"
                 }
             ],
-            "time": "2023-12-22T06:47:57+00:00"
+            "time": "2024-03-12T15:33:41+00:00"
         },
         {
             "name": "phpunit/php-file-iterator",
-            "version": "3.0.6",
+            "version": "4.1.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
-                "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf"
+                "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf",
-                "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/a95037b6d9e608ba092da1b23931e537cadc3c3c",
+                "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.3"
+                "php": ">=8.1"
             },
             "require-dev": {
-                "phpunit/phpunit": "^9.3"
+                "phpunit/phpunit": "^10.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.0-dev"
+                    "dev-main": "4.0-dev"
                 }
             },
             "autoload": {
             ],
             "support": {
                 "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues",
-                "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6"
+                "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy",
+                "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/4.1.0"
             },
             "funding": [
                 {
                     "type": "github"
                 }
             ],
-            "time": "2021-12-02T12:48:52+00:00"
+            "time": "2023-08-31T06:24:48+00:00"
         },
         {
             "name": "phpunit/php-invoker",
-            "version": "3.1.1",
+            "version": "4.0.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/php-invoker.git",
-                "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67"
+                "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67",
-                "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7",
+                "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.3"
+                "php": ">=8.1"
             },
             "require-dev": {
                 "ext-pcntl": "*",
-                "phpunit/phpunit": "^9.3"
+                "phpunit/phpunit": "^10.0"
             },
             "suggest": {
                 "ext-pcntl": "*"
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.1-dev"
+                    "dev-main": "4.0-dev"
                 }
             },
             "autoload": {
             ],
             "support": {
                 "issues": "https://github.com/sebastianbergmann/php-invoker/issues",
-                "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1"
+                "source": "https://github.com/sebastianbergmann/php-invoker/tree/4.0.0"
             },
             "funding": [
                 {
                     "type": "github"
                 }
             ],
-            "time": "2020-09-28T05:58:55+00:00"
+            "time": "2023-02-03T06:56:09+00:00"
         },
         {
             "name": "phpunit/php-text-template",
-            "version": "2.0.4",
+            "version": "3.0.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/php-text-template.git",
-                "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28"
+                "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28",
-                "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/0c7b06ff49e3d5072f057eb1fa59258bf287a748",
+                "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.3"
+                "php": ">=8.1"
             },
             "require-dev": {
-                "phpunit/phpunit": "^9.3"
+                "phpunit/phpunit": "^10.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.0-dev"
+                    "dev-main": "3.0-dev"
                 }
             },
             "autoload": {
             ],
             "support": {
                 "issues": "https://github.com/sebastianbergmann/php-text-template/issues",
-                "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4"
+                "security": "https://github.com/sebastianbergmann/php-text-template/security/policy",
+                "source": "https://github.com/sebastianbergmann/php-text-template/tree/3.0.1"
             },
             "funding": [
                 {
                     "type": "github"
                 }
             ],
-            "time": "2020-10-26T05:33:50+00:00"
+            "time": "2023-08-31T14:07:24+00:00"
         },
         {
             "name": "phpunit/php-timer",
-            "version": "5.0.3",
+            "version": "6.0.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/php-timer.git",
-                "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2"
+                "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2",
-                "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/e2a2d67966e740530f4a3343fe2e030ffdc1161d",
+                "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.3"
+                "php": ">=8.1"
             },
             "require-dev": {
-                "phpunit/phpunit": "^9.3"
+                "phpunit/phpunit": "^10.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "5.0-dev"
+                    "dev-main": "6.0-dev"
                 }
             },
             "autoload": {
             ],
             "support": {
                 "issues": "https://github.com/sebastianbergmann/php-timer/issues",
-                "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3"
+                "source": "https://github.com/sebastianbergmann/php-timer/tree/6.0.0"
             },
             "funding": [
                 {
                     "type": "github"
                 }
             ],
-            "time": "2020-10-26T13:16:10+00:00"
+            "time": "2023-02-03T06:57:52+00:00"
         },
         {
             "name": "phpunit/phpunit",
-            "version": "9.6.17",
+            "version": "10.5.13",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/phpunit.git",
-                "reference": "1a156980d78a6666721b7e8e8502fe210b587fcd"
+                "reference": "20a63fc1c6db29b15da3bd02d4b6cf59900088a7"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/1a156980d78a6666721b7e8e8502fe210b587fcd",
-                "reference": "1a156980d78a6666721b7e8e8502fe210b587fcd",
+                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/20a63fc1c6db29b15da3bd02d4b6cf59900088a7",
+                "reference": "20a63fc1c6db29b15da3bd02d4b6cf59900088a7",
                 "shasum": ""
             },
             "require": {
-                "doctrine/instantiator": "^1.3.1 || ^2",
                 "ext-dom": "*",
                 "ext-json": "*",
                 "ext-libxml": "*",
                 "myclabs/deep-copy": "^1.10.1",
                 "phar-io/manifest": "^2.0.3",
                 "phar-io/version": "^3.0.2",
-                "php": ">=7.3",
-                "phpunit/php-code-coverage": "^9.2.28",
-                "phpunit/php-file-iterator": "^3.0.5",
-                "phpunit/php-invoker": "^3.1.1",
-                "phpunit/php-text-template": "^2.0.3",
-                "phpunit/php-timer": "^5.0.2",
-                "sebastian/cli-parser": "^1.0.1",
-                "sebastian/code-unit": "^1.0.6",
-                "sebastian/comparator": "^4.0.8",
-                "sebastian/diff": "^4.0.3",
-                "sebastian/environment": "^5.1.3",
-                "sebastian/exporter": "^4.0.5",
-                "sebastian/global-state": "^5.0.1",
-                "sebastian/object-enumerator": "^4.0.3",
-                "sebastian/resource-operations": "^3.0.3",
-                "sebastian/type": "^3.2",
-                "sebastian/version": "^3.0.2"
+                "php": ">=8.1",
+                "phpunit/php-code-coverage": "^10.1.5",
+                "phpunit/php-file-iterator": "^4.0",
+                "phpunit/php-invoker": "^4.0",
+                "phpunit/php-text-template": "^3.0",
+                "phpunit/php-timer": "^6.0",
+                "sebastian/cli-parser": "^2.0",
+                "sebastian/code-unit": "^2.0",
+                "sebastian/comparator": "^5.0",
+                "sebastian/diff": "^5.0",
+                "sebastian/environment": "^6.0",
+                "sebastian/exporter": "^5.1",
+                "sebastian/global-state": "^6.0.1",
+                "sebastian/object-enumerator": "^5.0",
+                "sebastian/recursion-context": "^5.0",
+                "sebastian/type": "^4.0",
+                "sebastian/version": "^4.0"
             },
             "suggest": {
-                "ext-soap": "To be able to generate mocks based on WSDL files",
-                "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage"
+                "ext-soap": "To be able to generate mocks based on WSDL files"
             },
             "bin": [
                 "phpunit"
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "9.6-dev"
+                    "dev-main": "10.5-dev"
                 }
             },
             "autoload": {
             "support": {
                 "issues": "https://github.com/sebastianbergmann/phpunit/issues",
                 "security": "https://github.com/sebastianbergmann/phpunit/security/policy",
-                "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.17"
+                "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.13"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-02-23T13:14:51+00:00"
+            "time": "2024-03-12T15:37:41+00:00"
         },
         {
             "name": "sebastian/cli-parser",
-            "version": "1.0.1",
+            "version": "2.0.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/cli-parser.git",
-                "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2"
+                "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2",
-                "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2",
+                "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/c34583b87e7b7a8055bf6c450c2c77ce32a24084",
+                "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.3"
+                "php": ">=8.1"
             },
             "require-dev": {
-                "phpunit/phpunit": "^9.3"
+                "phpunit/phpunit": "^10.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0-dev"
+                    "dev-main": "2.0-dev"
                 }
             },
             "autoload": {
             "homepage": "https://github.com/sebastianbergmann/cli-parser",
             "support": {
                 "issues": "https://github.com/sebastianbergmann/cli-parser/issues",
-                "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1"
+                "security": "https://github.com/sebastianbergmann/cli-parser/security/policy",
+                "source": "https://github.com/sebastianbergmann/cli-parser/tree/2.0.1"
             },
             "funding": [
                 {
                     "type": "github"
                 }
             ],
-            "time": "2020-09-28T06:08:49+00:00"
+            "time": "2024-03-02T07:12:49+00:00"
         },
         {
             "name": "sebastian/code-unit",
-            "version": "1.0.8",
+            "version": "2.0.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/code-unit.git",
-                "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120"
+                "reference": "a81fee9eef0b7a76af11d121767abc44c104e503"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120",
-                "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120",
+                "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/a81fee9eef0b7a76af11d121767abc44c104e503",
+                "reference": "a81fee9eef0b7a76af11d121767abc44c104e503",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.3"
+                "php": ">=8.1"
             },
             "require-dev": {
-                "phpunit/phpunit": "^9.3"
+                "phpunit/phpunit": "^10.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0-dev"
+                    "dev-main": "2.0-dev"
                 }
             },
             "autoload": {
             "homepage": "https://github.com/sebastianbergmann/code-unit",
             "support": {
                 "issues": "https://github.com/sebastianbergmann/code-unit/issues",
-                "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8"
+                "source": "https://github.com/sebastianbergmann/code-unit/tree/2.0.0"
             },
             "funding": [
                 {
                     "type": "github"
                 }
             ],
-            "time": "2020-10-26T13:08:54+00:00"
+            "time": "2023-02-03T06:58:43+00:00"
         },
         {
             "name": "sebastian/code-unit-reverse-lookup",
-            "version": "2.0.3",
+            "version": "3.0.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
-                "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5"
+                "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5",
-                "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5",
+                "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/5e3a687f7d8ae33fb362c5c0743794bbb2420a1d",
+                "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.3"
+                "php": ">=8.1"
             },
             "require-dev": {
-                "phpunit/phpunit": "^9.3"
+                "phpunit/phpunit": "^10.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.0-dev"
+                    "dev-main": "3.0-dev"
                 }
             },
             "autoload": {
             "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
             "support": {
                 "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues",
-                "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3"
+                "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/3.0.0"
             },
             "funding": [
                 {
                     "type": "github"
                 }
             ],
-            "time": "2020-09-28T05:30:19+00:00"
+            "time": "2023-02-03T06:59:15+00:00"
         },
         {
             "name": "sebastian/comparator",
-            "version": "4.0.8",
+            "version": "5.0.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/comparator.git",
-                "reference": "fa0f136dd2334583309d32b62544682ee972b51a"
+                "reference": "2db5010a484d53ebf536087a70b4a5423c102372"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a",
-                "reference": "fa0f136dd2334583309d32b62544682ee972b51a",
+                "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2db5010a484d53ebf536087a70b4a5423c102372",
+                "reference": "2db5010a484d53ebf536087a70b4a5423c102372",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.3",
-                "sebastian/diff": "^4.0",
-                "sebastian/exporter": "^4.0"
+                "ext-dom": "*",
+                "ext-mbstring": "*",
+                "php": ">=8.1",
+                "sebastian/diff": "^5.0",
+                "sebastian/exporter": "^5.0"
             },
             "require-dev": {
-                "phpunit/phpunit": "^9.3"
+                "phpunit/phpunit": "^10.3"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "4.0-dev"
+                    "dev-main": "5.0-dev"
                 }
             },
             "autoload": {
             ],
             "support": {
                 "issues": "https://github.com/sebastianbergmann/comparator/issues",
-                "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8"
+                "security": "https://github.com/sebastianbergmann/comparator/security/policy",
+                "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.1"
             },
             "funding": [
                 {
                     "type": "github"
                 }
             ],
-            "time": "2022-09-14T12:41:17+00:00"
+            "time": "2023-08-14T13:18:12+00:00"
         },
         {
             "name": "sebastian/complexity",
-            "version": "2.0.3",
+            "version": "3.2.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/complexity.git",
-                "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a"
+                "reference": "68ff824baeae169ec9f2137158ee529584553799"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/25f207c40d62b8b7aa32f5ab026c53561964053a",
-                "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a",
+                "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/68ff824baeae169ec9f2137158ee529584553799",
+                "reference": "68ff824baeae169ec9f2137158ee529584553799",
                 "shasum": ""
             },
             "require": {
                 "nikic/php-parser": "^4.18 || ^5.0",
-                "php": ">=7.3"
+                "php": ">=8.1"
             },
             "require-dev": {
-                "phpunit/phpunit": "^9.3"
+                "phpunit/phpunit": "^10.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.0-dev"
+                    "dev-main": "3.2-dev"
                 }
             },
             "autoload": {
             "homepage": "https://github.com/sebastianbergmann/complexity",
             "support": {
                 "issues": "https://github.com/sebastianbergmann/complexity/issues",
-                "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.3"
+                "security": "https://github.com/sebastianbergmann/complexity/security/policy",
+                "source": "https://github.com/sebastianbergmann/complexity/tree/3.2.0"
             },
             "funding": [
                 {
                     "type": "github"
                 }
             ],
-            "time": "2023-12-22T06:19:30+00:00"
+            "time": "2023-12-21T08:37:17+00:00"
         },
         {
             "name": "sebastian/diff",
-            "version": "4.0.5",
+            "version": "5.1.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/diff.git",
-                "reference": "74be17022044ebaaecfdf0c5cd504fc9cd5a7131"
+                "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/74be17022044ebaaecfdf0c5cd504fc9cd5a7131",
-                "reference": "74be17022044ebaaecfdf0c5cd504fc9cd5a7131",
+                "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/c41e007b4b62af48218231d6c2275e4c9b975b2e",
+                "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.3"
+                "php": ">=8.1"
             },
             "require-dev": {
-                "phpunit/phpunit": "^9.3",
-                "symfony/process": "^4.2 || ^5"
+                "phpunit/phpunit": "^10.0",
+                "symfony/process": "^6.4"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "4.0-dev"
+                    "dev-main": "5.1-dev"
                 }
             },
             "autoload": {
             ],
             "support": {
                 "issues": "https://github.com/sebastianbergmann/diff/issues",
-                "source": "https://github.com/sebastianbergmann/diff/tree/4.0.5"
+                "security": "https://github.com/sebastianbergmann/diff/security/policy",
+                "source": "https://github.com/sebastianbergmann/diff/tree/5.1.1"
             },
             "funding": [
                 {
                     "type": "github"
                 }
             ],
-            "time": "2023-05-07T05:35:17+00:00"
+            "time": "2024-03-02T07:15:17+00:00"
         },
         {
             "name": "sebastian/environment",
-            "version": "5.1.5",
+            "version": "6.0.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/environment.git",
-                "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed"
+                "reference": "43c751b41d74f96cbbd4e07b7aec9675651e2951"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed",
-                "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed",
+                "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/43c751b41d74f96cbbd4e07b7aec9675651e2951",
+                "reference": "43c751b41d74f96cbbd4e07b7aec9675651e2951",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.3"
+                "php": ">=8.1"
             },
             "require-dev": {
-                "phpunit/phpunit": "^9.3"
+                "phpunit/phpunit": "^10.0"
             },
             "suggest": {
                 "ext-posix": "*"
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "5.1-dev"
+                    "dev-main": "6.0-dev"
                 }
             },
             "autoload": {
                 }
             ],
             "description": "Provides functionality to handle HHVM/PHP environments",
-            "homepage": "http://www.github.com/sebastianbergmann/environment",
+            "homepage": "https://github.com/sebastianbergmann/environment",
             "keywords": [
                 "Xdebug",
                 "environment",
             ],
             "support": {
                 "issues": "https://github.com/sebastianbergmann/environment/issues",
-                "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5"
+                "security": "https://github.com/sebastianbergmann/environment/security/policy",
+                "source": "https://github.com/sebastianbergmann/environment/tree/6.0.1"
             },
             "funding": [
                 {
                     "type": "github"
                 }
             ],
-            "time": "2023-02-03T06:03:51+00:00"
+            "time": "2023-04-11T05:39:26+00:00"
         },
         {
             "name": "sebastian/exporter",
-            "version": "4.0.5",
+            "version": "5.1.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/exporter.git",
-                "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d"
+                "reference": "955288482d97c19a372d3f31006ab3f37da47adf"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d",
-                "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d",
+                "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/955288482d97c19a372d3f31006ab3f37da47adf",
+                "reference": "955288482d97c19a372d3f31006ab3f37da47adf",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.3",
-                "sebastian/recursion-context": "^4.0"
+                "ext-mbstring": "*",
+                "php": ">=8.1",
+                "sebastian/recursion-context": "^5.0"
             },
             "require-dev": {
-                "ext-mbstring": "*",
-                "phpunit/phpunit": "^9.3"
+                "phpunit/phpunit": "^10.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "4.0-dev"
+                    "dev-main": "5.1-dev"
                 }
             },
             "autoload": {
             ],
             "support": {
                 "issues": "https://github.com/sebastianbergmann/exporter/issues",
-                "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.5"
+                "security": "https://github.com/sebastianbergmann/exporter/security/policy",
+                "source": "https://github.com/sebastianbergmann/exporter/tree/5.1.2"
             },
             "funding": [
                 {
                     "type": "github"
                 }
             ],
-            "time": "2022-09-14T06:03:37+00:00"
+            "time": "2024-03-02T07:17:12+00:00"
         },
         {
             "name": "sebastian/global-state",
-            "version": "5.0.6",
+            "version": "6.0.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/global-state.git",
-                "reference": "bde739e7565280bda77be70044ac1047bc007e34"
+                "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bde739e7565280bda77be70044ac1047bc007e34",
-                "reference": "bde739e7565280bda77be70044ac1047bc007e34",
+                "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/987bafff24ecc4c9ac418cab1145b96dd6e9cbd9",
+                "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.3",
-                "sebastian/object-reflector": "^2.0",
-                "sebastian/recursion-context": "^4.0"
+                "php": ">=8.1",
+                "sebastian/object-reflector": "^3.0",
+                "sebastian/recursion-context": "^5.0"
             },
             "require-dev": {
                 "ext-dom": "*",
-                "phpunit/phpunit": "^9.3"
-            },
-            "suggest": {
-                "ext-uopz": "*"
+                "phpunit/phpunit": "^10.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "5.0-dev"
+                    "dev-main": "6.0-dev"
                 }
             },
             "autoload": {
                 }
             ],
             "description": "Snapshotting of global state",
-            "homepage": "http://www.github.com/sebastianbergmann/global-state",
+            "homepage": "https://www.github.com/sebastianbergmann/global-state",
             "keywords": [
                 "global state"
             ],
             "support": {
                 "issues": "https://github.com/sebastianbergmann/global-state/issues",
-                "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.6"
+                "security": "https://github.com/sebastianbergmann/global-state/security/policy",
+                "source": "https://github.com/sebastianbergmann/global-state/tree/6.0.2"
             },
             "funding": [
                 {
                     "type": "github"
                 }
             ],
-            "time": "2023-08-02T09:26:13+00:00"
+            "time": "2024-03-02T07:19:19+00:00"
         },
         {
             "name": "sebastian/lines-of-code",
-            "version": "1.0.4",
+            "version": "2.0.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/lines-of-code.git",
-                "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5"
+                "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/e1e4a170560925c26d424b6a03aed157e7dcc5c5",
-                "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5",
+                "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/856e7f6a75a84e339195d48c556f23be2ebf75d0",
+                "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0",
                 "shasum": ""
             },
             "require": {
                 "nikic/php-parser": "^4.18 || ^5.0",
-                "php": ">=7.3"
+                "php": ">=8.1"
             },
             "require-dev": {
-                "phpunit/phpunit": "^9.3"
+                "phpunit/phpunit": "^10.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0-dev"
+                    "dev-main": "2.0-dev"
                 }
             },
             "autoload": {
             "homepage": "https://github.com/sebastianbergmann/lines-of-code",
             "support": {
                 "issues": "https://github.com/sebastianbergmann/lines-of-code/issues",
-                "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.4"
+                "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy",
+                "source": "https://github.com/sebastianbergmann/lines-of-code/tree/2.0.2"
             },
             "funding": [
                 {
                     "type": "github"
                 }
             ],
-            "time": "2023-12-22T06:20:34+00:00"
+            "time": "2023-12-21T08:38:20+00:00"
         },
         {
             "name": "sebastian/object-enumerator",
-            "version": "4.0.4",
+            "version": "5.0.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/object-enumerator.git",
-                "reference": "5c9eeac41b290a3712d88851518825ad78f45c71"
+                "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71",
-                "reference": "5c9eeac41b290a3712d88851518825ad78f45c71",
+                "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/202d0e344a580d7f7d04b3fafce6933e59dae906",
+                "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.3",
-                "sebastian/object-reflector": "^2.0",
-                "sebastian/recursion-context": "^4.0"
+                "php": ">=8.1",
+                "sebastian/object-reflector": "^3.0",
+                "sebastian/recursion-context": "^5.0"
             },
             "require-dev": {
-                "phpunit/phpunit": "^9.3"
+                "phpunit/phpunit": "^10.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "4.0-dev"
+                    "dev-main": "5.0-dev"
                 }
             },
             "autoload": {
             "homepage": "https://github.com/sebastianbergmann/object-enumerator/",
             "support": {
                 "issues": "https://github.com/sebastianbergmann/object-enumerator/issues",
-                "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4"
+                "source": "https://github.com/sebastianbergmann/object-enumerator/tree/5.0.0"
             },
             "funding": [
                 {
                     "type": "github"
                 }
             ],
-            "time": "2020-10-26T13:12:34+00:00"
+            "time": "2023-02-03T07:08:32+00:00"
         },
         {
             "name": "sebastian/object-reflector",
-            "version": "2.0.4",
+            "version": "3.0.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/object-reflector.git",
-                "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7"
+                "reference": "24ed13d98130f0e7122df55d06c5c4942a577957"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7",
-                "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7",
+                "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/24ed13d98130f0e7122df55d06c5c4942a577957",
+                "reference": "24ed13d98130f0e7122df55d06c5c4942a577957",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.3"
+                "php": ">=8.1"
             },
             "require-dev": {
-                "phpunit/phpunit": "^9.3"
+                "phpunit/phpunit": "^10.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.0-dev"
+                    "dev-main": "3.0-dev"
                 }
             },
             "autoload": {
             "homepage": "https://github.com/sebastianbergmann/object-reflector/",
             "support": {
                 "issues": "https://github.com/sebastianbergmann/object-reflector/issues",
-                "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4"
+                "source": "https://github.com/sebastianbergmann/object-reflector/tree/3.0.0"
             },
             "funding": [
                 {
                     "type": "github"
                 }
             ],
-            "time": "2020-10-26T13:14:26+00:00"
+            "time": "2023-02-03T07:06:18+00:00"
         },
         {
             "name": "sebastian/recursion-context",
-            "version": "4.0.5",
+            "version": "5.0.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/recursion-context.git",
-                "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1"
+                "reference": "05909fb5bc7df4c52992396d0116aed689f93712"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1",
-                "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1",
+                "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/05909fb5bc7df4c52992396d0116aed689f93712",
+                "reference": "05909fb5bc7df4c52992396d0116aed689f93712",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.3"
+                "php": ">=8.1"
             },
             "require-dev": {
-                "phpunit/phpunit": "^9.3"
+                "phpunit/phpunit": "^10.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "4.0-dev"
+                    "dev-main": "5.0-dev"
                 }
             },
             "autoload": {
             "homepage": "https://github.com/sebastianbergmann/recursion-context",
             "support": {
                 "issues": "https://github.com/sebastianbergmann/recursion-context/issues",
-                "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.5"
+                "source": "https://github.com/sebastianbergmann/recursion-context/tree/5.0.0"
             },
             "funding": [
                 {
                     "type": "github"
                 }
             ],
-            "time": "2023-02-03T06:07:39+00:00"
-        },
-        {
-            "name": "sebastian/resource-operations",
-            "version": "3.0.3",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/resource-operations.git",
-                "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8",
-                "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.3"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^9.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.0-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "[email protected]"
-                }
-            ],
-            "description": "Provides a list of PHP built-in functions that operate on resources",
-            "homepage": "https://www.github.com/sebastianbergmann/resource-operations",
-            "support": {
-                "issues": "https://github.com/sebastianbergmann/resource-operations/issues",
-                "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3"
-            },
-            "funding": [
-                {
-                    "url": "https://github.com/sebastianbergmann",
-                    "type": "github"
-                }
-            ],
-            "time": "2020-09-28T06:45:17+00:00"
+            "time": "2023-02-03T07:05:40+00:00"
         },
         {
             "name": "sebastian/type",
-            "version": "3.2.1",
+            "version": "4.0.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/type.git",
-                "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7"
+                "reference": "462699a16464c3944eefc02ebdd77882bd3925bf"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7",
-                "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7",
+                "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/462699a16464c3944eefc02ebdd77882bd3925bf",
+                "reference": "462699a16464c3944eefc02ebdd77882bd3925bf",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.3"
+                "php": ">=8.1"
             },
             "require-dev": {
-                "phpunit/phpunit": "^9.5"
+                "phpunit/phpunit": "^10.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.2-dev"
+                    "dev-main": "4.0-dev"
                 }
             },
             "autoload": {
             "homepage": "https://github.com/sebastianbergmann/type",
             "support": {
                 "issues": "https://github.com/sebastianbergmann/type/issues",
-                "source": "https://github.com/sebastianbergmann/type/tree/3.2.1"
+                "source": "https://github.com/sebastianbergmann/type/tree/4.0.0"
             },
             "funding": [
                 {
                     "type": "github"
                 }
             ],
-            "time": "2023-02-03T06:13:03+00:00"
+            "time": "2023-02-03T07:10:45+00:00"
         },
         {
             "name": "sebastian/version",
-            "version": "3.0.2",
+            "version": "4.0.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/version.git",
-                "reference": "c6c1022351a901512170118436c764e473f6de8c"
+                "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c",
-                "reference": "c6c1022351a901512170118436c764e473f6de8c",
+                "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c51fa83a5d8f43f1402e3f32a005e6262244ef17",
+                "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.3"
+                "php": ">=8.1"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.0-dev"
+                    "dev-main": "4.0-dev"
                 }
             },
             "autoload": {
             "homepage": "https://github.com/sebastianbergmann/version",
             "support": {
                 "issues": "https://github.com/sebastianbergmann/version/issues",
-                "source": "https://github.com/sebastianbergmann/version/tree/3.0.2"
+                "source": "https://github.com/sebastianbergmann/version/tree/4.0.1"
             },
             "funding": [
                 {
                     "type": "github"
                 }
             ],
-            "time": "2020-09-28T06:39:44+00:00"
+            "time": "2023-02-07T11:34:05+00:00"
         },
         {
             "name": "squizlabs/php_codesniffer",
         },
         {
             "name": "ssddanbrown/asserthtml",
-            "version": "v2.0.0",
+            "version": "v3.0.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/ssddanbrown/asserthtml.git",
-                "reference": "6baf3ef2087f5928ae34f0d41db27aefcdf60414"
+                "reference": "a2cf9394dfc4138b8d9691e1bd128ccc3d8fcc5d"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/ssddanbrown/asserthtml/zipball/6baf3ef2087f5928ae34f0d41db27aefcdf60414",
-                "reference": "6baf3ef2087f5928ae34f0d41db27aefcdf60414",
+                "url": "https://api.github.com/repos/ssddanbrown/asserthtml/zipball/a2cf9394dfc4138b8d9691e1bd128ccc3d8fcc5d",
+                "reference": "a2cf9394dfc4138b8d9691e1bd128ccc3d8fcc5d",
                 "shasum": ""
             },
             "require": {
                 "ext-dom": "*",
                 "ext-json": "*",
-                "php": ">=7.4",
-                "phpunit/phpunit": "^9.0",
-                "symfony/css-selector": "^5.0|^6.0",
-                "symfony/dom-crawler": "^5.0|^6.0"
+                "php": ">=8.1",
+                "phpunit/phpunit": "^10.0",
+                "symfony/css-selector": "^6.0",
+                "symfony/dom-crawler": "^6.0"
             },
             "require-dev": {
-                "vimeo/psalm": "^4.10"
+                "phpstan/phpstan": "^1.10"
             },
             "type": "library",
             "autoload": {
             "authors": [
                 {
                     "name": "Dan Brown",
-                    "email": "[email protected]",
+                    "homepage": "https://danb.me",
                     "role": "Developer"
                 }
             ],
             "homepage": "https://github.com/ssddanbrown/asserthtml",
             "support": {
                 "issues": "https://github.com/ssddanbrown/asserthtml/issues",
-                "source": "https://github.com/ssddanbrown/asserthtml/tree/v2.0.0"
+                "source": "https://github.com/ssddanbrown/asserthtml/tree/v3.0.0"
             },
             "funding": [
                 {
                     "type": "github"
                 }
             ],
-            "time": "2023-03-01T16:48:08+00:00"
+            "time": "2023-05-11T14:26:12+00:00"
         },
         {
             "name": "symfony/dom-crawler",
-            "version": "v6.0.19",
+            "version": "v6.4.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/dom-crawler.git",
-                "reference": "622578ff158318b1b49d95068bd6b66c713601e9"
+                "reference": "f0e7ec3fa17000e2d0cb4557b4b47c88a6a63531"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/622578ff158318b1b49d95068bd6b66c713601e9",
-                "reference": "622578ff158318b1b49d95068bd6b66c713601e9",
+                "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/f0e7ec3fa17000e2d0cb4557b4b47c88a6a63531",
+                "reference": "f0e7ec3fa17000e2d0cb4557b4b47c88a6a63531",
                 "shasum": ""
             },
             "require": {
-                "php": ">=8.0.2",
+                "masterminds/html5": "^2.6",
+                "php": ">=8.1",
                 "symfony/polyfill-ctype": "~1.8",
                 "symfony/polyfill-mbstring": "~1.0"
             },
-            "conflict": {
-                "masterminds/html5": "<2.6"
-            },
             "require-dev": {
-                "masterminds/html5": "^2.6",
-                "symfony/css-selector": "^5.4|^6.0"
-            },
-            "suggest": {
-                "symfony/css-selector": ""
+                "symfony/css-selector": "^5.4|^6.0|^7.0"
             },
             "type": "library",
             "autoload": {
             "description": "Eases DOM navigation for HTML and XML documents",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/dom-crawler/tree/v6.0.19"
+                "source": "https://github.com/symfony/dom-crawler/tree/v6.4.4"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2023-01-20T17:44:14+00:00"
+            "time": "2024-02-07T09:17:57+00:00"
         },
         {
             "name": "theseer/tokenizer",
-            "version": "1.2.2",
+            "version": "1.2.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/theseer/tokenizer.git",
-                "reference": "b2ad5003ca10d4ee50a12da31de12a5774ba6b96"
+                "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/theseer/tokenizer/zipball/b2ad5003ca10d4ee50a12da31de12a5774ba6b96",
-                "reference": "b2ad5003ca10d4ee50a12da31de12a5774ba6b96",
+                "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2",
+                "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2",
                 "shasum": ""
             },
             "require": {
             "description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
             "support": {
                 "issues": "https://github.com/theseer/tokenizer/issues",
-                "source": "https://github.com/theseer/tokenizer/tree/1.2.2"
+                "source": "https://github.com/theseer/tokenizer/tree/1.2.3"
             },
             "funding": [
                 {
                     "type": "github"
                 }
             ],
-            "time": "2023-11-20T00:12:19+00:00"
+            "time": "2024-03-03T12:36:25+00:00"
         }
     ],
     "aliases": [],
     "prefer-stable": true,
     "prefer-lowest": false,
     "platform": {
-        "php": "^8.0.2",
+        "php": "^8.1.0",
         "ext-curl": "*",
         "ext-dom": "*",
         "ext-fileinfo": "*",
     },
     "platform-dev": [],
     "platform-overrides": {
-        "php": "8.0.2"
+        "php": "8.1.0"
     },
     "plugin-api-version": "2.3.0"
 }
index 61b73b7f29c7d37cf5990c14ce10e7969abf442a..638394df60936d13a5c6e115742d88c1c1a9f615 100644 (file)
@@ -1,16 +1,17 @@
 <?php
 
+use Carbon\Carbon;
 use Illuminate\Database\Migrations\Migration;
 use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\DB;
+use Illuminate\Support\Facades\Schema;
 
 return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         Schema::create('users', function (Blueprint $table) {
             $table->increments('id');
@@ -26,17 +27,15 @@ return new class extends Migration
             'name'       => 'Admin',
             'email'      => '[email protected]',
             'password'   => bcrypt('password'),
-            'created_at' => \Carbon\Carbon::now()->toDateTimeString(),
-            'updated_at' => \Carbon\Carbon::now()->toDateTimeString(),
+            'created_at' => Carbon::now()->toDateTimeString(),
+            'updated_at' => Carbon::now()->toDateTimeString(),
         ]);
     }
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         Schema::drop('users');
     }
index f29aff42b8e10cdb75294d6ad39298e0d0c26b6f..f53370009c64f8527ff500b0df42a3ce54c46470 100644 (file)
@@ -2,15 +2,14 @@
 
 use Illuminate\Database\Migrations\Migration;
 use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
 
 return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         Schema::create('password_resets', function (Blueprint $table) {
             $table->string('email')->index();
@@ -21,10 +20,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         Schema::drop('password_resets');
     }
index 95916945871e27f367c2e62e4a6ff66176e9f4fd..98d0433650d05f7c75bbb3d2ae3629430b0dbf6a 100644 (file)
@@ -2,15 +2,14 @@
 
 use Illuminate\Database\Migrations\Migration;
 use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
 
 return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         Schema::create('books', function (Blueprint $table) {
             $table->increments('id');
@@ -23,10 +22,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         Schema::drop('books');
     }
index d9b266813ba0a6a861ab6221c253149e445ba431..8ef5fc97120a7762b7d44b14c8cab214d2ccee2b 100644 (file)
@@ -2,15 +2,14 @@
 
 use Illuminate\Database\Migrations\Migration;
 use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
 
 return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         Schema::create('pages', function (Blueprint $table) {
             $table->increments('id');
@@ -27,10 +26,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         Schema::drop('pages');
     }
index 8814d079e36eddca049b263b98890c549033ce77..ae57fc80da0819916ea9de64123046ac22dbbf7a 100644 (file)
@@ -2,15 +2,14 @@
 
 use Illuminate\Database\Migrations\Migration;
 use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
 
 return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         Schema::create('images', function (Blueprint $table) {
             $table->increments('id');
@@ -22,10 +21,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         Schema::drop('images');
     }
index bfccd6fac5ac6c17a47413cdde1c6ad7cdabcde7..fca92429c3d6f2f3b566d27f5d3be953cd7863b6 100644 (file)
@@ -2,15 +2,14 @@
 
 use Illuminate\Database\Migrations\Migration;
 use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
 
 return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         Schema::create('chapters', function (Blueprint $table) {
             $table->increments('id');
@@ -25,10 +24,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         Schema::drop('chapters');
     }
index 8acfd360ae53e75b95bbc71dd8243477a3102c34..51dfafc6aa7a7d828ae3cf084b369de4cd2e3989 100644 (file)
@@ -2,15 +2,14 @@
 
 use Illuminate\Database\Migrations\Migration;
 use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
 
 return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         Schema::table('pages', function (Blueprint $table) {
             $table->integer('created_by');
@@ -32,10 +31,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         Schema::table('pages', function (Blueprint $table) {
             $table->dropColumn('created_by');
index b8264fd29e6202b0efac265fa60ce0be7dea1cfa..af9104edcd3932ad43fb7ff864430d7085c6f7d9 100644 (file)
@@ -2,15 +2,14 @@
 
 use Illuminate\Database\Migrations\Migration;
 use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
 
 return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         Schema::create('page_revisions', function (Blueprint $table) {
             $table->increments('id');
@@ -25,10 +24,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         Schema::drop('page_revisions');
     }
index 742a4a40dd143a03451282e4860a9c7c08c63b39..316d52ced9f3d918dbe1865d45045695fef05f73 100644 (file)
@@ -2,15 +2,14 @@
 
 use Illuminate\Database\Migrations\Migration;
 use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
 
 return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         Schema::create('activities', function (Blueprint $table) {
             $table->increments('id');
@@ -26,10 +25,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         Schema::drop('activities');
     }
index 517cfaf439d5c84f95f3baa0ced589412e1090b8..a2a8ae9d69f997a17b227fe47460935fb359ec39 100644 (file)
  * @url https://github.com/Zizaco/entrust
  */
 
+use Carbon\Carbon;
 use Illuminate\Database\Migrations\Migration;
 use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\DB;
+use Illuminate\Support\Facades\Schema;
 
 return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         // Create table for storing roles
         Schema::create('roles', function (Blueprint $table) {
@@ -71,22 +72,22 @@ return new class extends Migration
             'name'         => 'admin',
             'display_name' => 'Admin',
             'description'  => 'Administrator of the whole application',
-            'created_at'   => \Carbon\Carbon::now()->toDateTimeString(),
-            'updated_at'   => \Carbon\Carbon::now()->toDateTimeString(),
+            'created_at'   => Carbon::now()->toDateTimeString(),
+            'updated_at'   => Carbon::now()->toDateTimeString(),
         ]);
         $editorId = DB::table('roles')->insertGetId([
             'name'         => 'editor',
             'display_name' => 'Editor',
             'description'  => 'User can edit Books, Chapters & Pages',
-            'created_at'   => \Carbon\Carbon::now()->toDateTimeString(),
-            'updated_at'   => \Carbon\Carbon::now()->toDateTimeString(),
+            'created_at'   => Carbon::now()->toDateTimeString(),
+            'updated_at'   => Carbon::now()->toDateTimeString(),
         ]);
         $viewerId = DB::table('roles')->insertGetId([
             'name'         => 'viewer',
             'display_name' => 'Viewer',
             'description'  => 'User can view books & their content behind authentication',
-            'created_at'   => \Carbon\Carbon::now()->toDateTimeString(),
-            'updated_at'   => \Carbon\Carbon::now()->toDateTimeString(),
+            'created_at'   => Carbon::now()->toDateTimeString(),
+            'updated_at'   => Carbon::now()->toDateTimeString(),
         ]);
 
         // Create default CRUD permissions and allocate to admins and editors
@@ -97,8 +98,8 @@ return new class extends Migration
                 $newPermId = DB::table('permissions')->insertGetId([
                     'name'         => strtolower($entity) . '-' . strtolower($op),
                     'display_name' => $op . ' ' . $entity . 's',
-                    'created_at'   => \Carbon\Carbon::now()->toDateTimeString(),
-                    'updated_at'   => \Carbon\Carbon::now()->toDateTimeString(),
+                    'created_at'   => Carbon::now()->toDateTimeString(),
+                    'updated_at'   => Carbon::now()->toDateTimeString(),
                 ]);
                 DB::table('permission_role')->insert([
                     ['permission_id' => $newPermId, 'role_id' => $adminId],
@@ -115,8 +116,8 @@ return new class extends Migration
                 $newPermId = DB::table('permissions')->insertGetId([
                     'name'         => strtolower($entity) . '-' . strtolower($op),
                     'display_name' => $op . ' ' . $entity,
-                    'created_at'   => \Carbon\Carbon::now()->toDateTimeString(),
-                    'updated_at'   => \Carbon\Carbon::now()->toDateTimeString(),
+                    'created_at'   => Carbon::now()->toDateTimeString(),
+                    'updated_at'   => Carbon::now()->toDateTimeString(),
                 ]);
                 DB::table('permission_role')->insert([
                     'permission_id' => $newPermId,
@@ -138,10 +139,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         Schema::drop('permission_role');
         Schema::drop('permissions');
index 45c9c08b32db0ecb7e6d7795d19fa77fdc3b26b9..d1273bf099d1433211f074f096b35737882cc189 100644 (file)
@@ -2,15 +2,14 @@
 
 use Illuminate\Database\Migrations\Migration;
 use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
 
 return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         Schema::create('settings', function (Blueprint $table) {
             $table->string('setting_key')->primary()->indexed();
@@ -21,10 +20,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         Schema::drop('settings');
     }
index 6097fd13edd71f82c87fc44edfc7892d078f92f4..4d58d940959fe954b4abe2d16895868ee465217c 100644 (file)
@@ -2,13 +2,13 @@
 
 use Illuminate\Database\Migrations\Migration;
 use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\DB;
+use Illuminate\Support\Facades\Schema;
 
 return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
     public function up()
     {
@@ -23,15 +23,14 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         $sm = Schema::getConnection()->getDoctrineSchemaManager();
-        $pages = $sm->listTableDetails('pages');
-        $books = $sm->listTableDetails('books');
-        $chapters = $sm->listTableDetails('chapters');
+        $prefix = DB::getTablePrefix();
+        $pages = $sm->introspectTable($prefix . 'pages');
+        $books = $sm->introspectTable($prefix . 'books');
+        $chapters = $sm->introspectTable($prefix . 'chapters');
 
         if ($pages->hasIndex('search')) {
             Schema::table('pages', function (Blueprint $table) {
index bea901136284912f400cfad4dfe924a4dd00e879..7a9b1a49655f593a53e3cf563ae5b8daebf7e1e3 100644 (file)
@@ -2,15 +2,14 @@
 
 use Illuminate\Database\Migrations\Migration;
 use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
 
 return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         Schema::create('social_accounts', function (Blueprint $table) {
             $table->increments('id');
@@ -24,10 +23,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         Schema::drop('social_accounts');
     }
index a28a5728edb3b91aa9883c782834b77387370990..9e58493c79c25d550be3761d5097f31800f0d1cb 100644 (file)
@@ -2,15 +2,14 @@
 
 use Illuminate\Database\Migrations\Migration;
 use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
 
 return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         Schema::table('users', function (Blueprint $table) {
             $table->boolean('email_confirmed')->default(true);
@@ -26,10 +25,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         Schema::table('users', function (Blueprint $table) {
             $table->dropColumn('email_confirmed');
index bb8c373d88958a4f55784e50d7a0ebb216466b4b..00ccc7ac3178f93f84f0a9608eba986c7ee29b86 100644 (file)
@@ -2,15 +2,14 @@
 
 use Illuminate\Database\Migrations\Migration;
 use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
 
 return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         Schema::create('views', function (Blueprint $table) {
             $table->increments('id');
@@ -24,10 +23,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         Schema::drop('views');
     }
index 3203eb8a7fdbb9df3fc572bffe765d01e1182c3a..3f18824477d0a1dcca821ade52f57670ad91a3f6 100644 (file)
@@ -2,15 +2,14 @@
 
 use Illuminate\Database\Migrations\Migration;
 use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
 
 return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         Schema::table('books', function (Blueprint $table) {
             $table->index('slug');
@@ -48,10 +47,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         Schema::table('books', function (Blueprint $table) {
             $table->dropIndex('books_slug_index');
index a18508c4561e1d1129d1802fbfae6cb97c48217d..b20c04520cb6306321e482ea9dc25655f3968545 100644 (file)
@@ -2,13 +2,13 @@
 
 use Illuminate\Database\Migrations\Migration;
 use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\DB;
+use Illuminate\Support\Facades\Schema;
 
 return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
     public function up()
     {
@@ -23,15 +23,14 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         $sm = Schema::getConnection()->getDoctrineSchemaManager();
-        $pages = $sm->listTableDetails('pages');
-        $books = $sm->listTableDetails('books');
-        $chapters = $sm->listTableDetails('chapters');
+        $prefix = DB::getTablePrefix();
+        $pages = $sm->introspectTable($prefix . 'pages');
+        $books = $sm->introspectTable($prefix . 'books');
+        $chapters = $sm->introspectTable($prefix . 'chapters');
 
         if ($pages->hasIndex('name_search')) {
             Schema::table('pages', function (Blueprint $table) {
index c9f9675c713d732866aa34db9f88883b9d7c49e8..ce6e5d6b61a8eaa7749cd5150c3b9874ff97b52d 100644 (file)
@@ -3,15 +3,14 @@
 use BookStack\Uploads\Image;
 use Illuminate\Database\Migrations\Migration;
 use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
 
 return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         Schema::table('images', function (Blueprint $table) {
             $table->string('path', 400);
@@ -27,10 +26,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         Schema::table('images', function (Blueprint $table) {
             $table->dropColumn('type');
index 950526ddc58bf2146e9c66e6e6da9f337e67d1c0..dd8bcf0b49e187d3c237f61d9e8f188448286079 100644 (file)
@@ -2,15 +2,14 @@
 
 use Illuminate\Database\Migrations\Migration;
 use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
 
 return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         Schema::table('users', function (Blueprint $table) {
             $table->integer('image_id')->default(0);
@@ -19,10 +18,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         Schema::table('users', function (Blueprint $table) {
             $table->dropColumn('image_id');
index ff889d867dfaadbd609beba234edefbc9cd9c602..413a8a29d95a859209104ea21429a0084b0d8e81 100644 (file)
@@ -2,15 +2,14 @@
 
 use Illuminate\Database\Migrations\Migration;
 use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
 
 return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         Schema::table('users', function (Blueprint $table) {
             $table->string('external_auth_id')->index();
@@ -19,10 +18,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         Schema::table('users', function (Blueprint $table) {
             $table->dropColumn('external_auth_id');
index a083e10b58008e971b12ce1d60c834b269ae7563..86a08f2c8abdcfb0279fd991692d2f1b4760dc1d 100644 (file)
@@ -2,15 +2,14 @@
 
 use Illuminate\Database\Migrations\Migration;
 use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
 
 return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         Schema::table('page_revisions', function (Blueprint $table) {
             $table->string('slug');
@@ -22,10 +21,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         Schema::table('page_revisions', function (Blueprint $table) {
             $table->dropColumn('slug');
index dd62301d6f33ccbabbb9333224fa0e6f542daf8e..c0d86086d92637a32afec36cc7bfb7941ac73104 100644 (file)
@@ -1,15 +1,15 @@
 <?php
 
+use Carbon\Carbon;
 use Illuminate\Database\Migrations\Migration;
+use Illuminate\Support\Facades\DB;
 
 return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         // Get roles with permissions we need to change
         $adminRoleId = DB::table('roles')->where('name', '=', 'admin')->first()->id;
@@ -30,8 +30,8 @@ return new class extends Migration
             $permissionId = DB::table('permissions')->insertGetId([
                 'name'         => $name,
                 'display_name' => $displayName,
-                'created_at'   => \Carbon\Carbon::now()->toDateTimeString(),
-                'updated_at'   => \Carbon\Carbon::now()->toDateTimeString(),
+                'created_at'   => Carbon::now()->toDateTimeString(),
+                'updated_at'   => Carbon::now()->toDateTimeString(),
             ]);
             DB::table('permission_role')->insert([
                 'role_id'       => $adminRoleId,
@@ -47,8 +47,8 @@ return new class extends Migration
                 $permissionId = DB::table('permissions')->insertGetId([
                     'name'         => strtolower($entity) . '-' . strtolower(str_replace(' ', '-', $op)),
                     'display_name' => $op . ' ' . $entity . 's',
-                    'created_at'   => \Carbon\Carbon::now()->toDateTimeString(),
-                    'updated_at'   => \Carbon\Carbon::now()->toDateTimeString(),
+                    'created_at'   => Carbon::now()->toDateTimeString(),
+                    'updated_at'   => Carbon::now()->toDateTimeString(),
                 ]);
                 DB::table('permission_role')->insert([
                     'role_id'       => $adminRoleId,
@@ -66,10 +66,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         // Get roles with permissions we need to change
         $adminRoleId = DB::table('roles')->where('name', '=', 'admin')->first()->id;
@@ -85,8 +83,8 @@ return new class extends Migration
                 $permissionId = DB::table('permissions')->insertGetId([
                     'name'         => strtolower($entity) . '-' . strtolower($op),
                     'display_name' => $op . ' ' . $entity . 's',
-                    'created_at'   => \Carbon\Carbon::now()->toDateTimeString(),
-                    'updated_at'   => \Carbon\Carbon::now()->toDateTimeString(),
+                    'created_at'   => Carbon::now()->toDateTimeString(),
+                    'updated_at'   => Carbon::now()->toDateTimeString(),
                 ]);
                 DB::table('permission_role')->insert([
                     'role_id'       => $adminRoleId,
@@ -103,8 +101,8 @@ return new class extends Migration
                 $permissionId = DB::table('permissions')->insertGetId([
                     'name'         => strtolower($entity) . '-' . strtolower($op),
                     'display_name' => $op . ' ' . $entity,
-                    'created_at'   => \Carbon\Carbon::now()->toDateTimeString(),
-                    'updated_at'   => \Carbon\Carbon::now()->toDateTimeString(),
+                    'created_at'   => Carbon::now()->toDateTimeString(),
+                    'updated_at'   => Carbon::now()->toDateTimeString(),
                 ]);
                 DB::table('permission_role')->insert([
                     'role_id'       => $adminRoleId,
index 7a796e728d234f32edb4f7325e254a8d6d0cd65e..cf8ba5f3027b1b50e479fd7e0c63f1b56f6adf70 100644 (file)
@@ -2,15 +2,14 @@
 
 use Illuminate\Database\Migrations\Migration;
 use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
 
 return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         Schema::table('images', function (Blueprint $table) {
             $table->integer('uploaded_to')->default(0);
@@ -46,10 +45,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         Schema::table('images', function (Blueprint $table) {
             $table->dropColumn('uploaded_to');
index 2fc6304372443f0f8f1700051a11b52ba6d2dc10..566f2fdeb1fc84d692b5852c17214d6ba8bf1194 100644 (file)
@@ -2,15 +2,14 @@
 
 use Illuminate\Database\Migrations\Migration;
 use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
 
 return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         Schema::table('page_revisions', function (Blueprint $table) {
             $table->string('type')->default('version');
@@ -20,10 +19,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         Schema::table('page_revisions', function (Blueprint $table) {
             $table->dropColumn('type');
index ce597963215668b57b6051eee3ba1b31eade480d..a8690513f67c7cc223f85972bdc67e21b6e4138b 100644 (file)
@@ -2,15 +2,14 @@
 
 use Illuminate\Database\Migrations\Migration;
 use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
 
 return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         Schema::table('pages', function (Blueprint $table) {
             $table->boolean('draft')->default(false);
@@ -20,10 +19,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         Schema::table('pages', function (Blueprint $table) {
             $table->dropColumn('draft');
index a89fc273d7840dda4045cb29ff7d7451fe00207d..f0b42b645e989bfbe62abee8ad352de827f1d36a 100644 (file)
@@ -2,15 +2,14 @@
 
 use Illuminate\Database\Migrations\Migration;
 use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
 
 return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         Schema::table('pages', function (Blueprint $table) {
             $table->longText('markdown')->default('');
@@ -23,10 +22,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         Schema::table('pages', function (Blueprint $table) {
             $table->dropColumn('markdown');
index 411c240074cfac35acf9227e702a8187c3b6a259..481ac785f284708535536bbec579f2a15fa01fd2 100644 (file)
@@ -1,15 +1,15 @@
 <?php
 
+use Carbon\Carbon;
 use Illuminate\Database\Migrations\Migration;
+use Illuminate\Support\Facades\DB;
 
 return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         $currentRoles = DB::table('roles')->get();
 
@@ -21,8 +21,8 @@ return new class extends Migration
                 $permId = DB::table('permissions')->insertGetId([
                     'name'         => strtolower($entity) . '-' . strtolower(str_replace(' ', '-', $op)),
                     'display_name' => $op . ' ' . $entity . 's',
-                    'created_at'   => \Carbon\Carbon::now()->toDateTimeString(),
-                    'updated_at'   => \Carbon\Carbon::now()->toDateTimeString(),
+                    'created_at'   => Carbon::now()->toDateTimeString(),
+                    'updated_at'   => Carbon::now()->toDateTimeString(),
                 ]);
                 // Assign view permission to all current roles
                 foreach ($currentRoles as $role) {
@@ -37,10 +37,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         // Delete the new view permission
         $entities = ['Book', 'Page', 'Chapter'];
index 745e156bc20334f392a5b5c726ea6029cdb54056..ba9f615e47ee36f25de74b47c4da990ef793e569 100644 (file)
@@ -1,17 +1,18 @@
 <?php
 
+use Carbon\Carbon;
 use Illuminate\Database\Migrations\Migration;
 use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\DB;
+use Illuminate\Support\Facades\Schema;
 use Illuminate\Support\Str;
 
 return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         Schema::create('joint_permissions', function (Blueprint $table) {
             $table->increments('id');
@@ -48,8 +49,8 @@ return new class extends Migration
             'description'  => 'The role given to public visitors if allowed',
             'system_name'  => 'public',
             'hidden'       => true,
-            'created_at'   => \Carbon\Carbon::now()->toDateTimeString(),
-            'updated_at'   => \Carbon\Carbon::now()->toDateTimeString(),
+            'created_at'   => Carbon::now()->toDateTimeString(),
+            'updated_at'   => Carbon::now()->toDateTimeString(),
         ];
 
         // Ensure unique name
@@ -79,10 +80,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         Schema::drop('joint_permissions');
 
index b065a052f681095670477eb016127c890fac2b65..1be9a389f1cc0dbc80d194b0e071b293277f7343 100644 (file)
@@ -2,15 +2,14 @@
 
 use Illuminate\Database\Migrations\Migration;
 use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
 
 return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         Schema::create('tags', function (Blueprint $table) {
             $table->increments('id');
@@ -30,10 +29,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         Schema::drop('tags');
     }
index 03942b17a394c39881056782278f7080131adcdf..562e6415f3695c7d0e0e5b45043ad985afdbbba3 100644 (file)
@@ -1,15 +1,14 @@
 <?php
 
 use Illuminate\Database\Migrations\Migration;
+use Illuminate\Support\Facades\Schema;
 
 return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         Schema::table('page_revisions', function ($table) {
             $table->string('summary')->nullable();
@@ -18,10 +17,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         Schema::table('page_revisions', function ($table) {
             $table->dropColumn('summary');
index 2f729673ffa32aaf8319f44b2fb46d7d765f76f1..fa0a5fe92700f8c7b1055d5140d840e9a529f850 100644 (file)
@@ -1,17 +1,17 @@
 <?php
 
+use Carbon\Carbon;
 use Illuminate\Database\Migrations\Migration;
 use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\Schema;
 
 return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         // Remove the hidden property from roles
         Schema::table('roles', function (Blueprint $table) {
@@ -29,8 +29,8 @@ return new class extends Migration
             'name'            => 'Guest',
             'system_name'     => 'public',
             'email_confirmed' => true,
-            'created_at'      => \Carbon\Carbon::now(),
-            'updated_at'      => \Carbon\Carbon::now(),
+            'created_at'      => Carbon::now(),
+            'updated_at'      => Carbon::now(),
         ]);
 
         // Get the public role
@@ -45,10 +45,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         Schema::table('roles', function (Blueprint $table) {
             $table->boolean('hidden')->default(false);
index 41db5723d0a53adb21caef769ab14e85904f467f..278051c8be1bb0db6fd8981facc6a7cbcdd376c1 100644 (file)
@@ -1,17 +1,17 @@
 <?php
 
+use Carbon\Carbon;
 use Illuminate\Database\Migrations\Migration;
 use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\Schema;
 
 return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         Schema::create('attachments', function (Blueprint $table) {
             $table->increments('id');
@@ -40,8 +40,8 @@ return new class extends Migration
             $permissionId = DB::table('role_permissions')->insertGetId([
                 'name'         => strtolower($entity) . '-' . strtolower(str_replace(' ', '-', $op)),
                 'display_name' => $op . ' ' . $entity . 's',
-                'created_at'   => \Carbon\Carbon::now()->toDateTimeString(),
-                'updated_at'   => \Carbon\Carbon::now()->toDateTimeString(),
+                'created_at'   => Carbon::now()->toDateTimeString(),
+                'updated_at'   => Carbon::now()->toDateTimeString(),
             ]);
             DB::table('permission_role')->insert([
                 'role_id'       => $adminRoleId,
@@ -52,10 +52,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         Schema::dropIfExists('attachments');
 
index abff912f20a2af886318e09b40b1d46a61f58a4d..7c07c0cb8be81783dfa86f22dee4f866d78921d3 100644 (file)
@@ -8,10 +8,8 @@ return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         Schema::create('cache', function (Blueprint $table) {
             $table->string('key')->unique();
@@ -22,10 +20,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         Schema::dropIfExists('cache');
     }
index c32838a8cc9854ee8c98abdc124d83ce360a4d0c..3f52752c23407e41c7955186669c65d21531d02e 100644 (file)
@@ -8,10 +8,8 @@ return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         Schema::create('sessions', function (Blueprint $table) {
             $table->string('id')->unique();
@@ -25,10 +23,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         Schema::dropIfExists('sessions');
     }
index 03a63392afd6817d5b1a0ea8b60c8a29b636fea0..56281741e3c9f220e9108802c244eb2dc10141b8 100644 (file)
@@ -2,16 +2,15 @@
 
 use Illuminate\Database\Migrations\Migration;
 use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\Schema;
 
 return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         Schema::create('search_terms', function (Blueprint $table) {
             $table->increments('id');
@@ -27,9 +26,10 @@ return new class extends Migration
         });
 
         $sm = Schema::getConnection()->getDoctrineSchemaManager();
-        $pages = $sm->listTableDetails('pages');
-        $books = $sm->listTableDetails('books');
-        $chapters = $sm->listTableDetails('chapters');
+        $prefix = DB::getTablePrefix();
+        $pages = $sm->introspectTable($prefix . 'pages');
+        $books = $sm->introspectTable($prefix . 'books');
+        $chapters = $sm->introspectTable($prefix . 'chapters');
 
         if ($pages->hasIndex('search')) {
             Schema::table('pages', function (Blueprint $table) {
@@ -55,10 +55,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         // This was removed for v0.24 since these indexes are removed anyway
         // and will cause issues for db engines that don't support such indexes.
index 891ff8e0a1de4ba216c3b82e66815061929c8876..182d95c75975c6ff0c41bac8132ddc3a512f82c8 100644 (file)
@@ -2,16 +2,15 @@
 
 use Illuminate\Database\Migrations\Migration;
 use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\Schema;
 
 return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         Schema::table('pages', function (Blueprint $table) {
             $table->integer('revision_count');
@@ -29,10 +28,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         Schema::table('pages', function (Blueprint $table) {
             $table->dropColumn('revision_count');
index 7805be700bd9b4fdced028bdb50d7257898ae80f..178cb584f9a5a2b810cfbcc9a015e7abb592d9fc 100644 (file)
@@ -6,8 +6,6 @@ return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
     public function up()
     {
@@ -18,8 +16,6 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
     public function down()
     {
index f654ebf6596f39fb13a13f7177b60fcfc2b6d377..d147854761659f7b34bfeb35d35ab82e29459eab 100644 (file)
@@ -1,17 +1,17 @@
 <?php
 
+use Carbon\Carbon;
 use Illuminate\Database\Migrations\Migration;
 use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\Schema;
 
 return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         Schema::create('comments', function (Blueprint $table) {
             $table->increments('id')->unsigned();
@@ -37,8 +37,8 @@ return new class extends Migration
                 $permissionId = DB::table('role_permissions')->insertGetId([
                     'name'         => strtolower($entity) . '-' . strtolower(str_replace(' ', '-', $op)),
                     'display_name' => $op . ' ' . $entity . 's',
-                    'created_at'   => \Carbon\Carbon::now()->toDateTimeString(),
-                    'updated_at'   => \Carbon\Carbon::now()->toDateTimeString(),
+                    'created_at'   => Carbon::now()->toDateTimeString(),
+                    'updated_at'   => Carbon::now()->toDateTimeString(),
                 ]);
                 DB::table('permission_role')->insert([
                     'role_id'       => $adminRoleId,
@@ -50,10 +50,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         Schema::dropIfExists('comments');
         // Delete comment role permissions
index 5ba3145f2b044a10c8a037237b617629797e4696..0f7b7d82a9ae4d292e5e0abff082e10c2e4f1eaf 100644 (file)
@@ -8,10 +8,8 @@ return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         Schema::table('books', function (Blueprint $table) {
             $table->integer('image_id')->nullable()->default(null);
@@ -20,10 +18,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         Schema::table('books', function (Blueprint $table) {
             $table->dropColumn('image_id');
index eb2bf91fc837bd5f326857fd33fce51876614a54..58694765655dcf220977c42c87f90a1e6c00c0b7 100644 (file)
@@ -8,10 +8,8 @@ return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         Schema::table('roles', function (Blueprint $table) {
             $table->string('external_auth_id', 180)->default('');
@@ -21,10 +19,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         Schema::table('roles', function (Blueprint $table) {
             $table->dropColumn('external_auth_id');
index bd3478bc7c8f696a6fb82406cf020f3d0548709d..54ccfb6baea3fb7176de36ab635d3835308dd182 100644 (file)
@@ -1,5 +1,6 @@
 <?php
 
+use Carbon\Carbon;
 use Illuminate\Database\Migrations\Migration;
 use Illuminate\Database\Schema\Blueprint;
 use Illuminate\Support\Facades\DB;
@@ -9,10 +10,8 @@ return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
 
         // Convert the existing entity tables to InnoDB.
@@ -83,8 +82,8 @@ return new class extends Migration
             $permId = DB::table('role_permissions')->insertGetId([
                 'name'         => 'bookshelf-' . $dbOpName,
                 'display_name' => $op . ' ' . 'BookShelves',
-                'created_at'   => \Carbon\Carbon::now()->toDateTimeString(),
-                'updated_at'   => \Carbon\Carbon::now()->toDateTimeString(),
+                'created_at'   => Carbon::now()->toDateTimeString(),
+                'updated_at'   => Carbon::now()->toDateTimeString(),
             ]);
 
             $rowsToInsert = $roleIdsWithBookPermission->filter(function ($roleId) {
@@ -103,10 +102,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         // Drop created permissions
         $ops = ['bookshelf-create-all', 'bookshelf-create-own', 'bookshelf-delete-all', 'bookshelf-delete-own', 'bookshelf-update-all', 'bookshelf-update-own', 'bookshelf-view-all', 'bookshelf-view-own'];
index 423e02827f5e897e537553c4ba0fa0859ae47b5f..cabde549e83caad156883c838d97f76b5bc51129 100644 (file)
@@ -3,16 +3,15 @@
 use Carbon\Carbon;
 use Illuminate\Database\Migrations\Migration;
 use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\Schema;
 
 return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         Schema::table('pages', function (Blueprint $table) {
             $table->boolean('template')->default(false);
@@ -35,10 +34,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         Schema::table('pages', function (Blueprint $table) {
             $table->dropColumn('template');
index ce88a28949b652e8893106b06e73b5f8c4eedf45..1ab4c72f8aa496b082de570581a3767728b5e6ab 100644 (file)
@@ -8,10 +8,8 @@ return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         Schema::create('user_invites', function (Blueprint $table) {
             $table->increments('id');
@@ -23,10 +21,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         Schema::dropIfExists('user_invites');
     }
index 2cf970a8aeeabb6bb3196389a206546884e42c10..99ce8d27c497b5f9462aea522d2b7135ff229cf8 100644 (file)
@@ -3,16 +3,15 @@
 use Illuminate\Database\Migrations\Migration;
 use Illuminate\Database\Schema\Blueprint;
 use Illuminate\Support\Carbon;
+use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\Schema;
 
 return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
 
         // Add API tokens table
@@ -42,10 +41,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         // Remove API tokens table
         Schema::dropIfExists('api_tokens');
index 902d3c227b62fe32d7afa21619e54c3028fd869e..882001cad5a911abcf65f478dec4d9473d90be85 100644 (file)
@@ -8,10 +8,8 @@ return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         Schema::table('joint_permissions', function (Blueprint $table) {
             $table->dropColumn('id');
@@ -21,10 +19,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         Schema::table('joint_permissions', function (Blueprint $table) {
             $table->dropPrimary(['role_id', 'entity_type', 'entity_id', 'action']);
index cd9f64697c7d1e19116b74e00ede45093e670fd9..10800e11fa43f405c0dd41d6ea75d76865285af2 100644 (file)
@@ -9,10 +9,8 @@ return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         Schema::table('roles', function (Blueprint $table) {
             $table->dropColumn('name');
@@ -21,10 +19,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         Schema::table('roles', function (Blueprint $table) {
             $table->string('name')->index();
index f7f35b62b9a9b6be4c6564a87a63b3e41540cf6a..ca1afb1daa93ff40218490a0ef85968408bbafc0 100644 (file)
@@ -8,10 +8,8 @@ return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         Schema::table('activities', function (Blueprint $table) {
             $table->index('key');
@@ -21,10 +19,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         Schema::table('activities', function (Blueprint $table) {
             $table->dropIndex('activities_key_index');
index 9cc12acdce39023da891c5221bfab6b6468ea5fa..bc6c3f18f593cb23c3895f4807d21c0bb33151e4 100644 (file)
@@ -8,10 +8,8 @@ return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         Schema::table('bookshelves', function (Blueprint $table) {
             $table->softDeletes();
@@ -29,10 +27,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         Schema::table('bookshelves', function (Blueprint $table) {
             $table->dropSoftDeletes();
index 3b1098175e9ee18e0c7dc648af12301d499c0f26..96c6c0b0dee0e82f0084394b8e50cd54c184badb 100644 (file)
@@ -8,10 +8,8 @@ return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         Schema::create('deletions', function (Blueprint $table) {
             $table->increments('id');
@@ -28,10 +26,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         Schema::dropIfExists('deletions');
     }
index 6ebe3fad015bc681f9b533d02f9593b085939533..c128a3235f740f448c5bddc1e634f134ae927a0f 100644 (file)
@@ -9,10 +9,8 @@ return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         Schema::table('activities', function (Blueprint $table) {
             $table->renameColumn('key', 'type');
@@ -32,10 +30,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         DB::table('activities')
             ->whereNull('entity_id')
index d9fab7f02ddebe306bd789ec0c4dc7721d85d645..965a061d834bd9f58477945be75613b4d3a8f239 100644 (file)
@@ -9,10 +9,8 @@ return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         $tables = ['pages', 'books', 'chapters', 'bookshelves'];
         foreach ($tables as $table) {
@@ -30,10 +28,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         $tables = ['pages', 'books', 'chapters', 'bookshelves'];
         foreach ($tables as $table) {
index 5d83d15f19a969a28108b3d46b6d2a468903653f..367b93a89c88e5089afa83d1fa2e7deb889d257d 100644 (file)
@@ -8,10 +8,8 @@ return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         Schema::table('settings', function (Blueprint $table) {
             $table->string('type', 50)->default('string');
@@ -20,10 +18,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         Schema::table('settings', function (Blueprint $table) {
             $table->dropColumn('type');
index c0e1313a714a05d46324584ba6fd605547a14f75..af01d66725160a00c7dc6ca912fa568cea681ad6 100644 (file)
@@ -2,6 +2,7 @@
 
 use Illuminate\Database\Migrations\Migration;
 use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\Schema;
 use Illuminate\Support\Str;
 
@@ -9,10 +10,8 @@ return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         Schema::table('users', function (Blueprint $table) {
             $table->string('slug', 180);
@@ -38,10 +37,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         Schema::table('users', function (Blueprint $table) {
             $table->dropColumn('slug');
index cdd7f4f6485670778af02419ff352a1ebd374fe9..73fa1b24be5e756fdbe8c29835ffb5eea6a5f6ca 100644 (file)
@@ -8,10 +8,8 @@ return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         Schema::create('favourites', function (Blueprint $table) {
             $table->increments('id');
@@ -26,10 +24,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         Schema::dropIfExists('favourites');
     }
index d145bf4ae9ac64e493cf82443ea322de727d17ef..ea45b8ce124ab2f6a15d92ac901c6e5abbcb0211 100644 (file)
@@ -8,10 +8,8 @@ return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         Schema::create('mfa_values', function (Blueprint $table) {
             $table->increments('id');
@@ -24,10 +22,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         Schema::dropIfExists('mfa_values');
     }
index 8a180f088545a975e38585b7a89c39d5e36c47ab..b8f8b1cff21ca75d6b9fe99e0ae3bf495655134b 100644 (file)
@@ -8,10 +8,8 @@ return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         Schema::table('roles', function (Blueprint $table) {
             $table->boolean('mfa_enforced');
@@ -20,10 +18,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         Schema::table('roles', function (Blueprint $table) {
             $table->dropColumn('mfa_enforced');
index 3bacab20b4ed3a6c811e57ec7b32d93c82e6b1f8..21f45aa0691b28e147dba9c85eed20842acf3ab4 100644 (file)
@@ -8,10 +8,8 @@ return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         // Create new templates-manage permission and assign to admin role
         $roles = DB::table('roles')->get('id');
@@ -34,10 +32,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         // Remove content-export permission
         $contentExportPermission = DB::table('role_permissions')
index 5f8a9500276c86c7ceaec46ec97d55293b98970e..6c21f4b2629ea95c8b8c128d524429047dd9bfef 100644 (file)
@@ -8,10 +8,8 @@ return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         Schema::table('activities', function (Blueprint $table) {
             $table->string('ip', 45)->after('user_id');
@@ -20,10 +18,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         Schema::table('activities', function (Blueprint $table) {
             $table->dropColumn('ip');
index 564e68a6de0ff626c4e4cf3675323f0155a6757f..9a0171bde112d335586192aa97d242d4313145a8 100644 (file)
@@ -8,10 +8,8 @@ return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         Schema::table('activities', function (Blueprint $table) {
             $table->index('ip', 'activities_ip_index');
@@ -20,10 +18,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         Schema::table('activities', function (Blueprint $table) {
             $table->dropIndex('activities_ip_index');
index 15d4851d68f46ef75f54ef5e599c1ba56e701620..69be2273db07248f868d6900b1fe2da234282244 100644 (file)
@@ -8,10 +8,8 @@ return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         Schema::create('webhooks', function (Blueprint $table) {
             $table->increments('id');
@@ -37,10 +35,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         Schema::dropIfExists('webhooks');
         Schema::dropIfExists('webhook_tracked_events');
index a786a8910060202665dabbc1d23f6d46696ff3a9..6098d9b123faa67507b3df8902e834ee63825cf8 100644 (file)
@@ -8,10 +8,8 @@ return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         Schema::create('jobs', function (Blueprint $table) {
             $table->bigIncrements('id');
@@ -26,10 +24,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         Schema::dropIfExists('jobs');
     }
index 17191986b47f67e56c7e34e306ffe1f236501fb6..249da8171acd0816601ccb095c3320393e66dea6 100644 (file)
@@ -8,10 +8,8 @@ return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         Schema::create('failed_jobs', function (Blueprint $table) {
             $table->id();
@@ -26,10 +24,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         Schema::dropIfExists('failed_jobs');
     }
index cb26fa26aea2676f8c0bbb856fdbc59b39a12053..968568d3362abf26cb8fbc85b4b753825b8d0469 100644 (file)
@@ -8,10 +8,8 @@ return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         Schema::table('webhooks', function (Blueprint $table) {
             $table->unsignedInteger('timeout')->default(3);
@@ -23,10 +21,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         Schema::table('webhooks', function (Blueprint $table) {
             $table->dropColumn('timeout');
index 17ed0fba064e54269c2e7b7bd9b48822fabb2b38..568e26512647774249d092877caa015ba53c588a 100644 (file)
@@ -10,10 +10,8 @@ return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         // Add the new 'editor' column to the pages table
         Schema::table('pages', function (Blueprint $table) {
@@ -46,10 +44,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         // Drop the new column from the pages table
         Schema::table('pages', function (Blueprint $table) {
index 2ec45e7d188ecb44810182938fbebd0e5acf5ab7..00e1e0688fc66e3d2ada430a6bedb9fe95da4f1d 100644 (file)
@@ -32,10 +32,8 @@ return new class extends Migration
 
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         foreach ($this->columnsByTable as $table => $column) {
             foreach ($this->changeMap as $oldVal => $newVal) {
@@ -48,10 +46,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         foreach ($this->columnsByTable as $table => $column) {
             foreach ($this->changeMap as $oldVal => $newVal) {
index ac52af2a6d68f6c804b5a0f1deae7d9a865d4580..a05290e8ae8fd54ea6cc7c56358785e7b4c6a7a5 100644 (file)
@@ -9,10 +9,8 @@ return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         DB::table('joint_permissions')
             ->where('action', '!=', 'view')
@@ -27,10 +25,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         Schema::table('joint_permissions', function (Blueprint $table) {
             $table->string('action');
index 4b688c43e88de5bbebdd61e1935c9c38e8e78dc1..e2580289d5e882fcdebfc592f7419f8e12424892 100644 (file)
@@ -8,10 +8,8 @@ return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         Schema::create('references', function (Blueprint $table) {
             $table->id();
@@ -24,10 +22,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         Schema::dropIfExists('references');
     }
index b8c23671dc1b7b5ecda0c2e58d175b253de91add..aecb4bca397e53f65dd29a7ad1746ff645019f03 100644 (file)
@@ -7,10 +7,8 @@ return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         // This updates the 'type' field for images, uploaded as shelf cover images,
         // to be cover_bookshelf instead of cover_book.
@@ -32,10 +30,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         DB::table('images')
             ->where('type', '=', 'cover_bookshelf')
index f1072102f8783b999506c2d5080046139fa4da49..a086796e9f153a0d0d6e42ddd66251938756229a 100644 (file)
@@ -10,10 +10,8 @@ return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         // Remove entries for non-existing roles (Caused by previous lack of deletion handling)
         $roleIds = DB::table('roles')->pluck('id');
@@ -63,10 +61,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         // Create old table structure for entity_permissions
         Schema::create('old_entity_permissions', function (Blueprint $table) {
index b2987674d61b58ff018b537516276792a0ad4a69..8e45d9ea51f353378a06359eb83f7245c7df78b5 100644 (file)
@@ -11,10 +11,8 @@ return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         // Remove entity-permissions on non-restricted entities
         $deleteInactiveEntityPermissions = function (string $table, string $morphClass) {
@@ -61,10 +59,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         // Create restricted columns
         $createRestrictedColumn = fn(Blueprint $table) => $table->boolean('restricted')->index()->default(0);
index 53994c52b57ef5f56f1d63a5ae7ce7c9590011f4..0e25c1d6052955d8dd8efa65edffd2c05453a443 100644 (file)
@@ -10,10 +10,8 @@ return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         // Truncate before schema changes to avoid performance issues
         // since we'll need to rebuild anyway.
@@ -34,10 +32,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         DB::table('joint_permissions')->truncate();
 
index 5187dabf470b23d7928e4b42470db0db24e635ae..6f137eca70501025d3cf8fbaef5eccd09768748f 100644 (file)
@@ -7,10 +7,8 @@ return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         $colorSettings = [
             'app-color',
@@ -45,10 +43,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         $colorSettings = [
             'app-color-dark',
index f7cb64ce648a90c00be8813730f0281dab429456..b2a81d49e13c21dcde9cf9f6672f625ae893a08d 100644 (file)
@@ -8,10 +8,8 @@ return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         Schema::table('attachments', function (Blueprint $table) {
             $table->text('path')->change();
@@ -20,10 +18,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         Schema::table('attachments', function (Blueprint $table) {
             $table->string('path')->change();
index 115bbb0c011beab05feefd842fadfc6968639cc6..c3dc3fb0aa70b57b92db9837f3b7ff8a89184889 100644 (file)
@@ -8,10 +8,8 @@ return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         Schema::table('pages', function (Blueprint $table) {
             $table->index('updated_at', 'pages_updated_at_index');
@@ -20,10 +18,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         Schema::table('pages', function (Blueprint $table) {
             $table->dropIndex('pages_updated_at_index');
index 8d04efdd953e875ed1e455c51a5c8d96d66d06f4..05f6be4a1c9ba65166d784f88ba33844740405d2 100644 (file)
@@ -7,10 +7,8 @@ return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         $guestUserId = DB::table('users')
             ->where('system_name', '=', 'public')
@@ -36,8 +34,6 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
     public function down()
     {
index b5dcaee751c27bae829eabd835eed52131c1fcc2..540491d3b38ac3c4b062d413406d3df1100ed3e2 100644 (file)
@@ -7,8 +7,6 @@ return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
     public function up()
     {
@@ -20,8 +18,6 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
     public function down()
     {
index 4872e421e64a13843cde5e62f4164a903d55064e..79e45a762fd536b208578fb84f76a2336645ffec 100644 (file)
@@ -2,15 +2,14 @@
 
 use Carbon\Carbon;
 use Illuminate\Database\Migrations\Migration;
+use Illuminate\Support\Facades\DB;
 
 return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         // Create new receive-notifications permission and assign to admin role
         $permissionId = DB::table('role_permissions')->insertGetId([
@@ -29,10 +28,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         $permission = DB::table('role_permissions')
             ->where('name', '=', 'receive-notifications')
index e2a5c20d07d3414901941bd92c1adbe018b9f192..cf2c7f1051b1d97285b9ca75814dad7e7636229e 100644 (file)
@@ -8,10 +8,8 @@ return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         Schema::create('watches', function (Blueprint $table) {
             $table->increments('id');
@@ -27,10 +25,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         Schema::dropIfExists('watches');
     }
index 865472c2e5dff26f5b1b3042674ae48b6b4655cc..bca7f9fc3de69c6e1b8b87fa6ebeed1c64944cab 100644 (file)
@@ -8,10 +8,8 @@ return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         Schema::table('cache', function (Blueprint $table) {
             $table->mediumText('value')->change();
@@ -20,10 +18,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         Schema::table('cache', function (Blueprint $table) {
             $table->text('value')->change();
index c23bebc2e63c0d4f3a28c60e393739b64f8c9acc..bfc480a2e22234e855aa6ec098b077ccb3323ed6 100644 (file)
@@ -8,10 +8,8 @@ class AddDefaultTemplateToBooks extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         Schema::table('books', function (Blueprint $table) {
             $table->integer('default_template_id')->nullable()->default(null);
@@ -20,10 +18,8 @@ class AddDefaultTemplateToBooks extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         Schema::table('books', function (Blueprint $table) {
             $table->dropColumn('default_template_id');
index 68c52e81be595cdb2a6da6fc1a7c4fc8d0a51fe7..781197e601de6c68d356ed1df0025900447aed1b 100644 (file)
@@ -8,10 +8,8 @@ return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         $addColumn = fn(Blueprint $table) => $table->text('description_html');
 
@@ -22,10 +20,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         $removeColumn = fn(Blueprint $table) => $table->removeColumn('description_html');
 
index b3a103a0173eedb187442b001d13abba90862421..77df82272a70b4a5141c6c77820a707d31cdaca4 100644 (file)
@@ -8,10 +8,8 @@ class AddDefaultTemplateToChapters extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         Schema::table('chapters', function (Blueprint $table) {
             $table->integer('default_template_id')->nullable()->default(null);
@@ -20,10 +18,8 @@ class AddDefaultTemplateToChapters extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         Schema::table('chapters', function (Blueprint $table) {
             $table->dropColumn('default_template_id');
index a643b3a1e0e7a44b66411eebed163300ccec1dd8..bc753867873a298b67acc40662facf6f2681526f 100644 (file)
@@ -8,10 +8,8 @@ return new class extends Migration
 {
     /**
      * Run the migrations.
-     *
-     * @return void
      */
-    public function up()
+    public function up(): void
     {
         Schema::table('views', function (Blueprint $table) {
             $table->index(['updated_at'], 'views_updated_at_index');
@@ -20,10 +18,8 @@ return new class extends Migration
 
     /**
      * Reverse the migrations.
-     *
-     * @return void
      */
-    public function down()
+    public function down(): void
     {
         Schema::table('views', function (Blueprint $table) {
             $table->dropIndex('views_updated_at_index');
index c47727c2c4e5129d8136bc2812f2e246db930113..53fbf0189f064df10a67db7ce8452c2a4f571754 100644 (file)
@@ -30,6 +30,10 @@ esbuild.build({
     format: 'esm',
     minify: isProd,
     logLevel: 'info',
+    banner: {
+        js: '// See the "/licenses" URI for full package license details',
+        css: '/* See the "/licenses" URI for full package license details */',
+    },
 }).then(result => {
     fs.writeFileSync('esbuild-meta.json', JSON.stringify(result.metafile));
 }).catch(() => process.exit(1));
index 349e315d2e3e98eed79ef08e9c3fc0e83d10e980..fe497e9e63e7050b5fb920cfa0d6249da87e9727 100644 (file)
@@ -3,23 +3,32 @@ FROM php:8.1-apache
 ENV APACHE_DOCUMENT_ROOT /app/public
 WORKDIR /app
 
-# Install additional dependacnies and configure apache
-RUN apt-get update -y \
-    && apt-get install -y git zip unzip libpng-dev libldap2-dev libzip-dev wait-for-it \
-    && docker-php-ext-configure ldap --with-libdir="lib/$(gcc -dumpmachine)" \
-    && docker-php-ext-install pdo_mysql gd ldap zip \
-    && pecl install xdebug \
-    && docker-php-ext-enable xdebug \
-    && a2enmod rewrite \
-    && sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf \
-    && sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf
+RUN <<EOR
+# Install additional dependencies
+apt-get update
+apt-get install -y \
+       git \
+       zip \
+       unzip \
+       libpng-dev \
+       libldap2-dev \
+       libzip-dev \
+       wait-for-it
+rm -rf /var/lib/apt/lists/*
+
+# Configure apache
+docker-php-ext-configure ldap --with-libdir="lib/$(gcc -dumpmachine)"
+docker-php-ext-install pdo_mysql gd ldap zip
+pecl install xdebug
+docker-php-ext-enable xdebug
+a2enmod rewrite
+sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf
+sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf
 
 # Install composer
-RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" \
-    && php composer-setup.php \
-    && mv composer.phar /usr/bin/composer \
-    && php -r "unlink('composer-setup.php');"
+curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
 
 # Use the default production configuration and update it as required
-RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini" \
-    && sed -i 's/memory_limit = 128M/memory_limit = 512M/g' "$PHP_INI_DIR/php.ini"
+mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"
+sed -i 's/memory_limit = 128M/memory_limit = 512M/g' "$PHP_INI_DIR/php.ini"
+EOR
diff --git a/dev/licensing/gen-js-licenses b/dev/licensing/gen-js-licenses
new file mode 100644 (file)
index 0000000..191a16f
--- /dev/null
@@ -0,0 +1,63 @@
+#!/usr/bin/env php
+<?php
+
+// This script reads the project composer.lock file to generate
+// clear license details for our PHP dependencies.
+
+declare(strict_types=1);
+require "gen-licenses-shared.php";
+
+$rootPath = dirname(__DIR__, 2);
+$outputPath = "{$rootPath}/dev/licensing/js-library-licenses.txt";
+$outputSeparator = "\n-----------\n";
+
+$packages = [
+    ...glob("{$rootPath}/node_modules/*/package.json"),
+    ...glob("{$rootPath}/node_modules/@*/*/package.json"),
+];
+
+$packageOutput = array_map(packageToOutput(...), $packages);
+
+$licenseInfo = implode($outputSeparator, $packageOutput) . "\n";
+file_put_contents($outputPath, $licenseInfo);
+
+echo "License information written to {$outputPath}\n";
+echo implode("\n", getWarnings()) . "\n";
+
+function packageToOutput(string $packagePath): string
+{
+    global $rootPath;
+    $package = json_decode(file_get_contents($packagePath));
+    $output = ["{$package->name}"];
+
+    $license = $package->license ?? '';
+    if ($license) {
+        $output[] = "License: {$license}";
+    } else {
+        warn("Package {$package->name}: No license found");
+    }
+
+    $licenseFile = findLicenseFile($package->name, $packagePath);
+    if ($licenseFile) {
+        $relLicenseFile = str_replace("{$rootPath}/", '', $licenseFile);
+        $output[] = "License File: {$relLicenseFile}";
+        $copyright = findCopyright($licenseFile);
+        if ($copyright) {
+            $output[] = "Copyright: {$copyright}";
+        } else {
+            warn("Package {$package->name}: no copyright found in its license");
+        }
+    }
+
+    $source = $package->repository->url ?? $package->repository ?? '';
+    if ($source) {
+        $output[] = "Source: {$source}";
+    }
+
+    $link = $package->homepage ?? $source;
+    if ($link) {
+        $output[] = "Link: {$link}";
+    }
+
+    return implode("\n", $output);
+}
diff --git a/dev/licensing/gen-licenses-shared.php b/dev/licensing/gen-licenses-shared.php
new file mode 100644 (file)
index 0000000..a8ad350
--- /dev/null
@@ -0,0 +1,66 @@
+<?php
+
+declare(strict_types=1);
+
+$warnings = [];
+
+function findLicenseFile(string $packageName, string $packagePath): string
+{
+    $licenseNameOptions = [
+        'license', 'LICENSE', 'License',
+        'license.*', 'LICENSE.*', 'License.*',
+        'license-*.*', 'LICENSE-*.*', 'License-*.*',
+    ];
+    $packageDir = dirname($packagePath);
+
+    $foundLicenses = [];
+    foreach ($licenseNameOptions as $option) {
+        $search = glob("{$packageDir}/$option");
+        array_push($foundLicenses, ...$search);
+    }
+
+    if (count($foundLicenses) > 1) {
+        warn("Package {$packageName}: more than one license file found");
+    }
+
+    if (count($foundLicenses) > 0) {
+        $fileName = basename($foundLicenses[0]);
+        return "{$packageDir}/{$fileName}";
+    }
+
+    warn("Package {$packageName}: no license files found");
+    return '';
+}
+
+function findCopyright(string $licenseFile): string
+{
+    $fileContents = file_get_contents($licenseFile);
+    $pattern = '/^.*?copyright (\(c\)|\d{4})[\s\S]*?(\n\n|\.\n)/mi';
+    $matches = [];
+    preg_match($pattern, $fileContents, $matches);
+    $copyright = trim($matches[0] ?? '');
+
+    if (str_contains($copyright, 'i.e.')) {
+        return '';
+    }
+
+    $emailPattern = '/([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,})/i';
+    return preg_replace_callback($emailPattern, obfuscateEmail(...), $copyright);
+}
+
+function obfuscateEmail(array $matches): string
+{
+    return preg_replace('/[^@.]/', '*', $matches[1]);
+}
+
+function warn(string $text): void
+{
+    global $warnings;
+    $warnings[] = "WARN:" . $text;
+}
+
+function getWarnings(): array
+{
+    global $warnings;
+    return $warnings;
+}
diff --git a/dev/licensing/gen-php-licenses b/dev/licensing/gen-php-licenses
new file mode 100644 (file)
index 0000000..79f4c2f
--- /dev/null
@@ -0,0 +1,55 @@
+#!/usr/bin/env php
+<?php
+
+// This script reads the project composer.lock file to generate
+// clear license details for our PHP dependencies.
+
+declare(strict_types=1);
+require "gen-licenses-shared.php";
+
+$rootPath = dirname(__DIR__, 2);
+$outputPath = "{$rootPath}/dev/licensing/php-library-licenses.txt";
+$composerLock = json_decode(file_get_contents($rootPath . "/composer.lock"));
+$outputSeparator = "\n-----------\n";
+
+$packages = $composerLock->packages;
+$packageOutput = array_map(packageToOutput(...), $packages);
+
+$licenseInfo =  implode($outputSeparator, $packageOutput) . "\n";
+file_put_contents($outputPath, $licenseInfo);
+
+echo "License information written to {$outputPath}\n";
+echo implode("\n", getWarnings()) . "\n";
+
+function packageToOutput(stdClass $package) : string {
+    global $rootPath;
+    $output = ["{$package->name}"];
+
+    $licenses = is_array($package->license) ? $package->license : [$package->license];
+    $output[] = "License: " . implode(' ', $licenses);
+
+    $packagePath = "{$rootPath}/vendor/{$package->name}/package.json";
+    $licenseFile = findLicenseFile($package->name, $packagePath);
+    if ($licenseFile) {
+        $relLicenseFile = str_replace("{$rootPath}/", '', $licenseFile);
+        $output[] = "License File: {$relLicenseFile}";
+        $copyright = findCopyright($licenseFile);
+        if ($copyright) {
+            $output[] = "Copyright: {$copyright}";
+        } else {
+            warn("Package {$package->name}: no copyright found in its license");
+        }
+    }
+
+    $source = $package->source->url;
+    if ($source) {
+        $output[] = "Source: {$source}";
+    }
+
+    $link = $package->homepage ?? $package->source->url ?? '';
+    if ($link) {
+        $output[] = "Link: {$link}";
+    }
+
+    return implode("\n", $output);
+}
\ No newline at end of file
diff --git a/dev/licensing/js-library-licenses.txt b/dev/licensing/js-library-licenses.txt
new file mode 100644 (file)
index 0000000..56dc1ff
--- /dev/null
@@ -0,0 +1,1978 @@
+acorn-jsx
+License: MIT
+License File: node_modules/acorn-jsx/LICENSE
+Copyright: Copyright (C) 2012-2017 by Ingvar Stepanyan
+Source: https://github.com/acornjs/acorn-jsx
+Link: https://github.com/acornjs/acorn-jsx
+-----------
+acorn
+License: MIT
+License File: node_modules/acorn/LICENSE
+Copyright: Copyright (C) 2012-2022 by various contributors (see AUTHORS)
+Source: https://github.com/acornjs/acorn.git
+Link: https://github.com/acornjs/acorn
+-----------
+ajv
+License: MIT
+License File: node_modules/ajv/LICENSE
+Copyright: Copyright (c) 2015-2017 Evgeny Poberezkin
+Source: https://github.com/ajv-validator/ajv.git
+Link: https://github.com/ajv-validator/ajv
+-----------
+ansi-regex
+License: MIT
+License File: node_modules/ansi-regex/license
+Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (sindresorhus.com)
+Source: chalk/ansi-regex
+Link: chalk/ansi-regex
+-----------
+ansi-styles
+License: MIT
+License File: node_modules/ansi-styles/license
+Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (sindresorhus.com)
+Source: chalk/ansi-styles
+Link: chalk/ansi-styles
+-----------
+anymatch
+License: ISC
+License File: node_modules/anymatch/LICENSE
+Copyright: Copyright (c) 2019 Elan Shanker, Paul Miller (https://paulmillr.com)
+Source: https://github.com/micromatch/anymatch
+Link: https://github.com/micromatch/anymatch
+-----------
+argparse
+License: Python-2.0
+License File: node_modules/argparse/LICENSE
+Source: nodeca/argparse
+Link: nodeca/argparse
+-----------
+array-buffer-byte-length
+License: MIT
+License File: node_modules/array-buffer-byte-length/LICENSE
+Copyright: Copyright (c) 2023 Inspect JS
+Source: git+https://github.com/inspect-js/array-buffer-byte-length.git
+Link: https://github.com/inspect-js/array-buffer-byte-length#readme
+-----------
+array-includes
+License: MIT
+License File: node_modules/array-includes/LICENSE
+Copyright: Copyright (C) 2015 Jordan Harband
+Source: git://github.com/es-shims/array-includes.git
+Link: git://github.com/es-shims/array-includes.git
+-----------
+array.prototype.filter
+License: MIT
+License File: node_modules/array.prototype.filter/LICENSE
+Copyright: Copyright (c) 2021 Jordan Harband
+Source: git+https://github.com/es-shims/Array.prototype.filter.git
+Link: https://github.com/es-shims/Array.prototype.filter#readme
+-----------
+array.prototype.findlastindex
+License: MIT
+License File: node_modules/array.prototype.findlastindex/LICENSE
+Copyright: Copyright (c) 2021 ECMAScript Shims
+Source: git+https://github.com/es-shims/Array.prototype.findLastIndex.git
+Link: https://github.com/es-shims/Array.prototype.findLastIndex#readme
+-----------
+array.prototype.flat
+License: MIT
+License File: node_modules/array.prototype.flat/LICENSE
+Copyright: Copyright (c) 2017 ECMAScript Shims
+Source: git://github.com/es-shims/Array.prototype.flat.git
+Link: git://github.com/es-shims/Array.prototype.flat.git
+-----------
+array.prototype.flatmap
+License: MIT
+License File: node_modules/array.prototype.flatmap/LICENSE
+Copyright: Copyright (c) 2017 ECMAScript Shims
+Source: git://github.com/es-shims/Array.prototype.flatMap.git
+Link: git://github.com/es-shims/Array.prototype.flatMap.git
+-----------
+arraybuffer.prototype.slice
+License: MIT
+License File: node_modules/arraybuffer.prototype.slice/LICENSE
+Copyright: Copyright (c) 2023 ECMAScript Shims
+Source: git+https://github.com/es-shims/ArrayBuffer.prototype.slice.git
+Link: https://github.com/es-shims/ArrayBuffer.prototype.slice#readme
+-----------
+available-typed-arrays
+License: MIT
+License File: node_modules/available-typed-arrays/LICENSE
+Copyright: Copyright (c) 2020 Inspect JS
+Source: git+https://github.com/inspect-js/available-typed-arrays.git
+Link: https://github.com/inspect-js/available-typed-arrays#readme
+-----------
+balanced-match
+License: MIT
+License File: node_modules/balanced-match/LICENSE.md
+Copyright: Copyright (c) 2013 Julian Gruber &lt;******@************.***&gt;
+Source: git://github.com/juliangruber/balanced-match.git
+Link: https://github.com/juliangruber/balanced-match
+-----------
+binary-extensions
+License: MIT
+License File: node_modules/binary-extensions/license
+Copyright: Copyright (c) 2019 Sindre Sorhus <************@*****.***> (https://sindresorhus.com), Paul Miller (https://paulmillr.com)
+Source: sindresorhus/binary-extensions
+Link: sindresorhus/binary-extensions
+-----------
+brace-expansion
+License: MIT
+License File: node_modules/brace-expansion/LICENSE
+Copyright: Copyright (c) 2013 Julian Gruber <******@************.***>
+Source: git://github.com/juliangruber/brace-expansion.git
+Link: https://github.com/juliangruber/brace-expansion
+-----------
+braces
+License: MIT
+License File: node_modules/braces/LICENSE
+Copyright: Copyright (c) 2014-2018, Jon Schlinkert.
+Source: micromatch/braces
+Link: https://github.com/micromatch/braces
+-----------
+call-bind
+License: MIT
+License File: node_modules/call-bind/LICENSE
+Copyright: Copyright (c) 2020 Jordan Harband
+Source: git+https://github.com/ljharb/call-bind.git
+Link: https://github.com/ljharb/call-bind#readme
+-----------
+callsites
+License: MIT
+License File: node_modules/callsites/license
+Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (sindresorhus.com)
+Source: sindresorhus/callsites
+Link: sindresorhus/callsites
+-----------
+camelcase
+License: MIT
+License File: node_modules/camelcase/license
+Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (sindresorhus.com)
+Source: sindresorhus/camelcase
+Link: sindresorhus/camelcase
+-----------
+chalk
+License: MIT
+License File: node_modules/chalk/license
+Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (sindresorhus.com)
+Source: chalk/chalk
+Link: chalk/chalk
+-----------
+chokidar-cli
+License: MIT
+License File: node_modules/chokidar-cli/LICENSE
+Copyright: Copyright (c) 2015 Kimmo Brunfeldt
+Source: https://github.com/open-npm-tools/chokidar-cli.git
+Link: https://github.com/open-npm-tools/chokidar-cli
+-----------
+chokidar
+License: MIT
+License File: node_modules/chokidar/LICENSE
+Copyright: Copyright (c) 2012-2019 Paul Miller (https://paulmillr.com), Elan Shanker
+Source: git+https://github.com/paulmillr/chokidar.git
+Link: https://github.com/paulmillr/chokidar
+-----------
+cliui
+License: ISC
+License File: node_modules/cliui/LICENSE.txt
+Copyright: Copyright (c) 2015, Contributors
+Source: http://github.com/yargs/cliui.git
+Link: http://github.com/yargs/cliui.git
+-----------
+codemirror
+License: MIT
+License File: node_modules/codemirror/LICENSE
+Copyright: Copyright (C) 2018-2021 by Marijn Haverbeke <*******@*****.***> and others
+Source: https://github.com/codemirror/basic-setup.git
+Link: https://github.com/codemirror/basic-setup.git
+-----------
+color-convert
+License: MIT
+License File: node_modules/color-convert/LICENSE
+Copyright: Copyright (c) 2011-2016 Heather Arthur <**********@*****.***>
+Source: Qix-/color-convert
+Link: Qix-/color-convert
+-----------
+color-name
+License: MIT
+License File: node_modules/color-name/LICENSE
+Source: [email protected]:colorjs/color-name.git
+Link: https://github.com/colorjs/color-name
+-----------
+concat-map
+License: MIT
+License File: node_modules/concat-map/LICENSE
+Source: git://github.com/substack/node-concat-map.git
+Link: git://github.com/substack/node-concat-map.git
+-----------
+confusing-browser-globals
+License: MIT
+License File: node_modules/confusing-browser-globals/LICENSE
+Copyright: Copyright (c) 2013-present, Facebook, Inc.
+Source: https://github.com/facebook/create-react-app.git
+Link: https://github.com/facebook/create-react-app.git
+-----------
+crelt
+License: MIT
+License File: node_modules/crelt/LICENSE
+Copyright: Copyright (C) 2020 by Marijn Haverbeke <******@*********.******>
+Source: git+https://github.com/marijnh/crelt.git
+Link: https://github.com/marijnh/crelt#readme
+-----------
+cross-spawn
+License: MIT
+License File: node_modules/cross-spawn/LICENSE
+Copyright: Copyright (c) 2018 Made With MOXY Lda <*****@****.******>
+Source: [email protected]:moxystudio/node-cross-spawn.git
+Link: https://github.com/moxystudio/node-cross-spawn
+-----------
+debug
+License: MIT
+License File: node_modules/debug/LICENSE
+Copyright: Copyright (c) 2014-2017 TJ Holowaychuk <**@************.**>
+Copyright (c) 2018-2021 Josh Junon
+Source: git://github.com/debug-js/debug.git
+Link: git://github.com/debug-js/debug.git
+-----------
+decamelize
+License: MIT
+License File: node_modules/decamelize/license
+Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (sindresorhus.com)
+Source: sindresorhus/decamelize
+Link: sindresorhus/decamelize
+-----------
+deep-is
+License: MIT
+License File: node_modules/deep-is/LICENSE
+Copyright: Copyright (c) 2012, 2013 Thorsten Lorenz <********@***.**>
+Copyright (c) 2012 James Halliday <****@********.***>
+Copyright (c) 2009 Thomas Robinson <280north.com>
+Source: http://github.com/thlorenz/deep-is.git
+Link: http://github.com/thlorenz/deep-is.git
+-----------
+define-data-property
+License: MIT
+License File: node_modules/define-data-property/LICENSE
+Copyright: Copyright (c) 2023 Jordan Harband
+Source: git+https://github.com/ljharb/define-data-property.git
+Link: https://github.com/ljharb/define-data-property#readme
+-----------
+define-properties
+License: MIT
+License File: node_modules/define-properties/LICENSE
+Copyright: Copyright (C) 2015 Jordan Harband
+Source: git://github.com/ljharb/define-properties.git
+Link: git://github.com/ljharb/define-properties.git
+-----------
+doctrine
+License: Apache-2.0
+License File: node_modules/doctrine/LICENSE
+Source: eslint/doctrine
+Link: https://github.com/eslint/doctrine
+-----------
+emoji-regex
+License: MIT
+License File: node_modules/emoji-regex/LICENSE-MIT.txt
+Source: https://github.com/mathiasbynens/emoji-regex.git
+Link: https://mths.be/emoji-regex
+-----------
+entities
+License: BSD-2-Clause
+License File: node_modules/entities/LICENSE
+Copyright: Copyright (c) Felix Böhm
+All rights reserved.
+Source: git://github.com/fb55/entities.git
+Link: git://github.com/fb55/entities.git
+-----------
+error-ex
+License: MIT
+License File: node_modules/error-ex/LICENSE
+Copyright: Copyright (c) 2015 JD Ballard
+Source: qix-/node-error-ex
+Link: qix-/node-error-ex
+-----------
+es-abstract
+License: MIT
+License File: node_modules/es-abstract/LICENSE
+Copyright: Copyright (C) 2015 Jordan Harband
+Source: git://github.com/ljharb/es-abstract.git
+Link: git://github.com/ljharb/es-abstract.git
+-----------
+es-array-method-boxes-properly
+License: MIT
+License File: node_modules/es-array-method-boxes-properly/LICENSE
+Copyright: Copyright (c) 2019 Jordan Harband
+Source: git+https://github.com/ljharb/es-array-method-boxes-properly.git
+Link: https://github.com/ljharb/es-array-method-boxes-properly#readme
+-----------
+es-define-property
+License: MIT
+License File: node_modules/es-define-property/LICENSE
+Copyright: Copyright (c) 2024 Jordan Harband
+Source: git+https://github.com/ljharb/es-define-property.git
+Link: https://github.com/ljharb/es-define-property#readme
+-----------
+es-errors
+License: MIT
+License File: node_modules/es-errors/LICENSE
+Copyright: Copyright (c) 2024 Jordan Harband
+Source: git+https://github.com/ljharb/es-errors.git
+Link: https://github.com/ljharb/es-errors#readme
+-----------
+es-set-tostringtag
+License: MIT
+License File: node_modules/es-set-tostringtag/LICENSE
+Copyright: Copyright (c) 2022 ECMAScript Shims
+Source: git+https://github.com/es-shims/es-set-tostringtag.git
+Link: https://github.com/es-shims/es-set-tostringtag#readme
+-----------
+es-shim-unscopables
+License: MIT
+License File: node_modules/es-shim-unscopables/LICENSE
+Copyright: Copyright (c) 2022 Jordan Harband
+Source: git+https://github.com/ljharb/es-shim-unscopables.git
+Link: https://github.com/ljharb/es-shim-unscopables#readme
+-----------
+es-to-primitive
+License: MIT
+License File: node_modules/es-to-primitive/LICENSE
+Copyright: Copyright (c) 2015 Jordan Harband
+Source: git://github.com/ljharb/es-to-primitive.git
+Link: git://github.com/ljharb/es-to-primitive.git
+-----------
+esbuild
+License: MIT
+License File: node_modules/esbuild/LICENSE.md
+Copyright: Copyright (c) 2020 Evan Wallace
+Source: git+https://github.com/evanw/esbuild.git
+Link: git+https://github.com/evanw/esbuild.git
+-----------
+escape-string-regexp
+License: MIT
+License File: node_modules/escape-string-regexp/license
+Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (https://sindresorhus.com)
+Source: sindresorhus/escape-string-regexp
+Link: sindresorhus/escape-string-regexp
+-----------
+eslint-config-airbnb-base
+License: MIT
+License File: node_modules/eslint-config-airbnb-base/LICENSE.md
+Copyright: Copyright (c) 2012 Airbnb
+Source: https://github.com/airbnb/javascript
+Link: https://github.com/airbnb/javascript
+-----------
+eslint-import-resolver-node
+License: MIT
+License File: node_modules/eslint-import-resolver-node/LICENSE
+Copyright: Copyright (c) 2015 Ben Mosher
+Source: https://github.com/import-js/eslint-plugin-import
+Link: https://github.com/import-js/eslint-plugin-import
+-----------
+eslint-module-utils
+License: MIT
+License File: node_modules/eslint-module-utils/LICENSE
+Copyright: Copyright (c) 2015 Ben Mosher
+Source: git+https://github.com/import-js/eslint-plugin-import.git
+Link: https://github.com/import-js/eslint-plugin-import#readme
+-----------
+eslint-plugin-import
+License: MIT
+License File: node_modules/eslint-plugin-import/LICENSE
+Copyright: Copyright (c) 2015 Ben Mosher
+Source: https://github.com/import-js/eslint-plugin-import
+Link: https://github.com/import-js/eslint-plugin-import
+-----------
+eslint-scope
+License: BSD-2-Clause
+License File: node_modules/eslint-scope/LICENSE
+Copyright: Copyright (C) 2012-2013 Yusuke Suzuki (twitter: @Constellation) and other contributors.
+Source: eslint/eslint-scope
+Link: http://github.com/eslint/eslint-scope
+-----------
+eslint-visitor-keys
+License: Apache-2.0
+License File: node_modules/eslint-visitor-keys/LICENSE
+Source: eslint/eslint-visitor-keys
+Link: https://github.com/eslint/eslint-visitor-keys#readme
+-----------
+eslint
+License: MIT
+License File: node_modules/eslint/LICENSE
+Source: eslint/eslint
+Link: https://eslint.org
+-----------
+espree
+License: BSD-2-Clause
+License File: node_modules/espree/LICENSE
+Copyright: Copyright (c) Open JS Foundation
+All rights reserved.
+Source: eslint/espree
+Link: https://github.com/eslint/espree
+-----------
+esquery
+License: BSD-3-Clause
+License File: node_modules/esquery/license.txt
+Copyright: Copyright (c) 2013, Joel Feenstra
+All rights reserved.
+Source: https://github.com/estools/esquery.git
+Link: https://github.com/estools/esquery/
+-----------
+esrecurse
+License: BSD-2-Clause
+Source: https://github.com/estools/esrecurse.git
+Link: https://github.com/estools/esrecurse
+-----------
+estraverse
+License: BSD-2-Clause
+License File: node_modules/estraverse/LICENSE.BSD
+Source: http://github.com/estools/estraverse.git
+Link: https://github.com/estools/estraverse
+-----------
+esutils
+License: BSD-2-Clause
+License File: node_modules/esutils/LICENSE.BSD
+Source: http://github.com/estools/esutils.git
+Link: https://github.com/estools/esutils
+-----------
+fast-deep-equal
+License: MIT
+License File: node_modules/fast-deep-equal/LICENSE
+Copyright: Copyright (c) 2017 Evgeny Poberezkin
+Source: git+https://github.com/epoberezkin/fast-deep-equal.git
+Link: https://github.com/epoberezkin/fast-deep-equal#readme
+-----------
+fast-json-stable-stringify
+License: MIT
+License File: node_modules/fast-json-stable-stringify/LICENSE
+Copyright: Copyright (c) 2017 Evgeny Poberezkin
+Copyright (c) 2013 James Halliday
+Source: git://github.com/epoberezkin/fast-json-stable-stringify.git
+Link: https://github.com/epoberezkin/fast-json-stable-stringify
+-----------
+fast-levenshtein
+License: MIT
+License File: node_modules/fast-levenshtein/LICENSE.md
+Copyright: Copyright (c) 2013 [Ramesh Nair](http://www.hiddentao.com/)
+Source: https://github.com/hiddentao/fast-levenshtein.git
+Link: https://github.com/hiddentao/fast-levenshtein.git
+-----------
+fastq
+License: ISC
+License File: node_modules/fastq/LICENSE
+Copyright: Copyright (c) 2015-2020, Matteo Collina <******.*******@*****.***>
+Source: git+https://github.com/mcollina/fastq.git
+Link: https://github.com/mcollina/fastq#readme
+-----------
+file-entry-cache
+License: MIT
+License File: node_modules/file-entry-cache/LICENSE
+Copyright: Copyright (c) 2015 Roy Riojas
+Source: royriojas/file-entry-cache
+Link: royriojas/file-entry-cache
+-----------
+fill-range
+License: MIT
+License File: node_modules/fill-range/LICENSE
+Copyright: Copyright (c) 2014-present, Jon Schlinkert.
+Source: jonschlinkert/fill-range
+Link: https://github.com/jonschlinkert/fill-range
+-----------
+find-up
+License: MIT
+License File: node_modules/find-up/license
+Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (https://sindresorhus.com)
+Source: sindresorhus/find-up
+Link: sindresorhus/find-up
+-----------
+flat-cache
+License: MIT
+License File: node_modules/flat-cache/LICENSE
+Copyright: Copyright (c) Roy Riojas and Jared Wray
+Source: jaredwray/flat-cache
+Link: jaredwray/flat-cache
+-----------
+flatted
+License: ISC
+License File: node_modules/flatted/LICENSE
+Copyright: Copyright (c) 2018-2020, Andrea Giammarchi, @WebReflection
+Source: git+https://github.com/WebReflection/flatted.git
+Link: https://github.com/WebReflection/flatted#readme
+-----------
+for-each
+License: MIT
+License File: node_modules/for-each/LICENSE
+Copyright: Copyright (c) 2012 Raynos.
+Source: git://github.com/Raynos/for-each.git
+Link: https://github.com/Raynos/for-each
+-----------
+fs.realpath
+License: ISC
+License File: node_modules/fs.realpath/LICENSE
+Copyright: Copyright (c) Isaac Z. Schlueter and Contributors
+Source: git+https://github.com/isaacs/fs.realpath.git
+Link: git+https://github.com/isaacs/fs.realpath.git
+-----------
+function-bind
+License: MIT
+License File: node_modules/function-bind/LICENSE
+Copyright: Copyright (c) 2013 Raynos.
+Source: https://github.com/Raynos/function-bind.git
+Link: https://github.com/Raynos/function-bind
+-----------
+function.prototype.name
+License: MIT
+License File: node_modules/function.prototype.name/LICENSE
+Copyright: Copyright (c) 2016 Jordan Harband
+Source: git://github.com/es-shims/Function.prototype.name.git
+Link: git://github.com/es-shims/Function.prototype.name.git
+-----------
+functions-have-names
+License: MIT
+License File: node_modules/functions-have-names/LICENSE
+Copyright: Copyright (c) 2019 Jordan Harband
+Source: git+https://github.com/inspect-js/functions-have-names.git
+Link: https://github.com/inspect-js/functions-have-names#readme
+-----------
+get-caller-file
+License: ISC
+License File: node_modules/get-caller-file/LICENSE.md
+Copyright: Copyright 2018 Stefan Penner
+Source: git+https://github.com/stefanpenner/get-caller-file.git
+Link: https://github.com/stefanpenner/get-caller-file#readme
+-----------
+get-intrinsic
+License: MIT
+License File: node_modules/get-intrinsic/LICENSE
+Copyright: Copyright (c) 2020 Jordan Harband
+Source: git+https://github.com/ljharb/get-intrinsic.git
+Link: https://github.com/ljharb/get-intrinsic#readme
+-----------
+get-symbol-description
+License: MIT
+License File: node_modules/get-symbol-description/LICENSE
+Copyright: Copyright (c) 2021 Inspect JS
+Source: git+https://github.com/inspect-js/get-symbol-description.git
+Link: https://github.com/inspect-js/get-symbol-description#readme
+-----------
+glob-parent
+License: ISC
+License File: node_modules/glob-parent/LICENSE
+Copyright: Copyright (c) 2015, 2019 Elan Shanker
+Source: gulpjs/glob-parent
+Link: gulpjs/glob-parent
+-----------
+glob
+License: ISC
+License File: node_modules/glob/LICENSE
+Copyright: Copyright (c) Isaac Z. Schlueter and Contributors
+Source: git://github.com/isaacs/node-glob.git
+Link: git://github.com/isaacs/node-glob.git
+-----------
+globals
+License: MIT
+License File: node_modules/globals/license
+Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (https://sindresorhus.com)
+Source: sindresorhus/globals
+Link: sindresorhus/globals
+-----------
+globalthis
+License: MIT
+License File: node_modules/globalthis/LICENSE
+Copyright: Copyright (c) 2016 Jordan Harband
+Source: git://github.com/ljharb/System.global.git
+Link: git://github.com/ljharb/System.global.git
+-----------
+gopd
+License: MIT
+License File: node_modules/gopd/LICENSE
+Copyright: Copyright (c) 2022 Jordan Harband
+Source: git+https://github.com/ljharb/gopd.git
+Link: https://github.com/ljharb/gopd#readme
+-----------
+graceful-fs
+License: ISC
+License File: node_modules/graceful-fs/LICENSE
+Copyright: Copyright (c) 2011-2022 Isaac Z. Schlueter, Ben Noordhuis, and Contributors
+Source: https://github.com/isaacs/node-graceful-fs
+Link: https://github.com/isaacs/node-graceful-fs
+-----------
+graphemer
+License: MIT
+License File: node_modules/graphemer/LICENSE
+Copyright: Copyright 2020 Filament (Anomalous Technologies Limited)
+Source: https://github.com/flmnt/graphemer.git
+Link: https://github.com/flmnt/graphemer
+-----------
+has-bigints
+License: MIT
+License File: node_modules/has-bigints/LICENSE
+Copyright: Copyright (c) 2019 Jordan Harband
+Source: git+https://github.com/ljharb/has-bigints.git
+Link: https://github.com/ljharb/has-bigints#readme
+-----------
+has-flag
+License: MIT
+License File: node_modules/has-flag/license
+Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (sindresorhus.com)
+Source: sindresorhus/has-flag
+Link: sindresorhus/has-flag
+-----------
+has-property-descriptors
+License: MIT
+License File: node_modules/has-property-descriptors/LICENSE
+Copyright: Copyright (c) 2022 Inspect JS
+Source: git+https://github.com/inspect-js/has-property-descriptors.git
+Link: https://github.com/inspect-js/has-property-descriptors#readme
+-----------
+has-proto
+License: MIT
+License File: node_modules/has-proto/LICENSE
+Copyright: Copyright (c) 2022 Inspect JS
+Source: git+https://github.com/inspect-js/has-proto.git
+Link: https://github.com/inspect-js/has-proto#readme
+-----------
+has-symbols
+License: MIT
+License File: node_modules/has-symbols/LICENSE
+Copyright: Copyright (c) 2016 Jordan Harband
+Source: git://github.com/inspect-js/has-symbols.git
+Link: https://github.com/ljharb/has-symbols#readme
+-----------
+has-tostringtag
+License: MIT
+License File: node_modules/has-tostringtag/LICENSE
+Copyright: Copyright (c) 2021 Inspect JS
+Source: git+https://github.com/inspect-js/has-tostringtag.git
+Link: https://github.com/inspect-js/has-tostringtag#readme
+-----------
+hasown
+License: MIT
+License File: node_modules/hasown/LICENSE
+Copyright: Copyright (c) Jordan Harband and contributors
+Source: git+https://github.com/inspect-js/hasOwn.git
+Link: https://github.com/inspect-js/hasOwn#readme
+-----------
+hosted-git-info
+License: ISC
+License File: node_modules/hosted-git-info/LICENSE
+Copyright: Copyright (c) 2015, Rebecca Turner
+Source: git+https://github.com/npm/hosted-git-info.git
+Link: https://github.com/npm/hosted-git-info
+-----------
+idb-keyval
+License: Apache-2.0
+Source: git+https://github.com/jakearchibald/idb-keyval.git
+Link: https://github.com/jakearchibald/idb-keyval#readme
+-----------
+ignore
+License: MIT
+Source: [email protected]:kaelzhang/node-ignore.git
+Link: [email protected]:kaelzhang/node-ignore.git
+-----------
+immutable
+License: MIT
+License File: node_modules/immutable/LICENSE
+Copyright: Copyright (c) 2014-present, Lee Byron and other contributors.
+Source: git://github.com/immutable-js/immutable-js.git
+Link: https://immutable-js.com
+-----------
+import-fresh
+License: MIT
+License File: node_modules/import-fresh/license
+Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (https://sindresorhus.com)
+Source: sindresorhus/import-fresh
+Link: sindresorhus/import-fresh
+-----------
+imurmurhash
+License: MIT
+Source: https://github.com/jensyt/imurmurhash-js
+Link: https://github.com/jensyt/imurmurhash-js
+-----------
+inflight
+License: ISC
+License File: node_modules/inflight/LICENSE
+Copyright: Copyright (c) Isaac Z. Schlueter
+Source: https://github.com/npm/inflight.git
+Link: https://github.com/isaacs/inflight
+-----------
+inherits
+License: ISC
+License File: node_modules/inherits/LICENSE
+Copyright: Copyright (c) Isaac Z. Schlueter
+Source: git://github.com/isaacs/inherits
+Link: git://github.com/isaacs/inherits
+-----------
+internal-slot
+License: MIT
+License File: node_modules/internal-slot/LICENSE
+Copyright: Copyright (c) 2019 Jordan Harband
+Source: git+https://github.com/ljharb/internal-slot.git
+Link: https://github.com/ljharb/internal-slot#readme
+-----------
+is-array-buffer
+License: MIT
+License File: node_modules/is-array-buffer/LICENSE
+Copyright: Copyright (c) 2015 Chen Gengyuan, Inspect JS
+Source: git+https://github.com/inspect-js/is-array-buffer.git
+Link: https://github.com/inspect-js/is-array-buffer#readme
+-----------
+is-arrayish
+License: MIT
+License File: node_modules/is-arrayish/LICENSE
+Copyright: Copyright (c) 2015 JD Ballard
+Source: https://github.com/qix-/node-is-arrayish.git
+Link: https://github.com/qix-/node-is-arrayish.git
+-----------
+is-bigint
+License: MIT
+License File: node_modules/is-bigint/LICENSE
+Copyright: Copyright (c) 2018 Jordan Harband
+Source: git+https://github.com/inspect-js/is-bigint.git
+Link: https://github.com/inspect-js/is-bigint#readme
+-----------
+is-binary-path
+License: MIT
+License File: node_modules/is-binary-path/license
+Copyright: Copyright (c) 2019 Sindre Sorhus <************@*****.***> (https://sindresorhus.com), Paul Miller (https://paulmillr.com)
+Source: sindresorhus/is-binary-path
+Link: sindresorhus/is-binary-path
+-----------
+is-boolean-object
+License: MIT
+License File: node_modules/is-boolean-object/LICENSE
+Copyright: Copyright (c) 2015 Jordan Harband
+Source: git://github.com/inspect-js/is-boolean-object.git
+Link: git://github.com/inspect-js/is-boolean-object.git
+-----------
+is-callable
+License: MIT
+License File: node_modules/is-callable/LICENSE
+Copyright: Copyright (c) 2015 Jordan Harband
+Source: git://github.com/inspect-js/is-callable.git
+Link: git://github.com/inspect-js/is-callable.git
+-----------
+is-core-module
+License: MIT
+License File: node_modules/is-core-module/LICENSE
+Copyright: Copyright (c) 2014 Dave Justice
+Source: git+https://github.com/inspect-js/is-core-module.git
+Link: https://github.com/inspect-js/is-core-module
+-----------
+is-date-object
+License: MIT
+License File: node_modules/is-date-object/LICENSE
+Copyright: Copyright (c) 2015 Jordan Harband
+Source: git://github.com/inspect-js/is-date-object.git
+Link: git://github.com/inspect-js/is-date-object.git
+-----------
+is-extglob
+License: MIT
+License File: node_modules/is-extglob/LICENSE
+Copyright: Copyright (c) 2014-2016, Jon Schlinkert
+Source: jonschlinkert/is-extglob
+Link: https://github.com/jonschlinkert/is-extglob
+-----------
+is-fullwidth-code-point
+License: MIT
+License File: node_modules/is-fullwidth-code-point/license
+Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (sindresorhus.com)
+Source: sindresorhus/is-fullwidth-code-point
+Link: sindresorhus/is-fullwidth-code-point
+-----------
+is-glob
+License: MIT
+License File: node_modules/is-glob/LICENSE
+Copyright: Copyright (c) 2014-2017, Jon Schlinkert.
+Source: micromatch/is-glob
+Link: https://github.com/micromatch/is-glob
+-----------
+is-negative-zero
+License: MIT
+License File: node_modules/is-negative-zero/LICENSE
+Copyright: Copyright (c) 2014 Jordan Harband
+Source: git://github.com/inspect-js/is-negative-zero.git
+Link: https://github.com/inspect-js/is-negative-zero
+-----------
+is-number-object
+License: MIT
+License File: node_modules/is-number-object/LICENSE
+Copyright: Copyright (c) 2015 Jordan Harband
+Source: git://github.com/inspect-js/is-number-object.git
+Link: https://github.com/inspect-js/is-number-object#readme
+-----------
+is-number
+License: MIT
+License File: node_modules/is-number/LICENSE
+Copyright: Copyright (c) 2014-present, Jon Schlinkert.
+Source: jonschlinkert/is-number
+Link: https://github.com/jonschlinkert/is-number
+-----------
+is-path-inside
+License: MIT
+License File: node_modules/is-path-inside/license
+Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (sindresorhus.com)
+Source: sindresorhus/is-path-inside
+Link: sindresorhus/is-path-inside
+-----------
+is-regex
+License: MIT
+License File: node_modules/is-regex/LICENSE
+Copyright: Copyright (c) 2014 Jordan Harband
+Source: git://github.com/inspect-js/is-regex.git
+Link: https://github.com/inspect-js/is-regex
+-----------
+is-shared-array-buffer
+License: MIT
+License File: node_modules/is-shared-array-buffer/LICENSE
+Copyright: Copyright (c) 2021 Inspect JS
+Source: git+https://github.com/inspect-js/is-shared-array-buffer.git
+Link: https://github.com/inspect-js/is-shared-array-buffer#readme
+-----------
+is-string
+License: MIT
+License File: node_modules/is-string/LICENSE
+Copyright: Copyright (c) 2015 Jordan Harband
+Source: git://github.com/ljharb/is-string.git
+Link: git://github.com/ljharb/is-string.git
+-----------
+is-symbol
+License: MIT
+License File: node_modules/is-symbol/LICENSE
+Copyright: Copyright (c) 2015 Jordan Harband
+Source: git://github.com/inspect-js/is-symbol.git
+Link: git://github.com/inspect-js/is-symbol.git
+-----------
+is-typed-array
+License: MIT
+License File: node_modules/is-typed-array/LICENSE
+Copyright: Copyright (c) 2015 Jordan Harband
+Source: git://github.com/inspect-js/is-typed-array.git
+Link: git://github.com/inspect-js/is-typed-array.git
+-----------
+is-weakref
+License: MIT
+License File: node_modules/is-weakref/LICENSE
+Copyright: Copyright (c) 2020 Inspect JS
+Source: git+https://github.com/inspect-js/is-weakref.git
+Link: https://github.com/inspect-js/is-weakref#readme
+-----------
+isarray
+License: MIT
+License File: node_modules/isarray/LICENSE
+Copyright: Copyright (c) 2013 Julian Gruber <******@************.***>
+Source: git://github.com/juliangruber/isarray.git
+Link: https://github.com/juliangruber/isarray
+-----------
+isexe
+License: ISC
+License File: node_modules/isexe/LICENSE
+Copyright: Copyright (c) Isaac Z. Schlueter and Contributors
+Source: git+https://github.com/isaacs/isexe.git
+Link: https://github.com/isaacs/isexe#readme
+-----------
+js-yaml
+License: MIT
+License File: node_modules/js-yaml/LICENSE
+Copyright: Copyright (C) 2011-2015 by Vitaly Puzrin
+Source: nodeca/js-yaml
+Link: nodeca/js-yaml
+-----------
+json-buffer
+License: MIT
+License File: node_modules/json-buffer/LICENSE
+Copyright: Copyright (c) 2013 Dominic Tarr
+Source: git://github.com/dominictarr/json-buffer.git
+Link: https://github.com/dominictarr/json-buffer
+-----------
+json-parse-better-errors
+License: MIT
+License File: node_modules/json-parse-better-errors/LICENSE.md
+Copyright: Copyright 2017 Kat Marchán
+Source: https://github.com/zkat/json-parse-better-errors
+Link: https://github.com/zkat/json-parse-better-errors
+-----------
+json-schema-traverse
+License: MIT
+License File: node_modules/json-schema-traverse/LICENSE
+Copyright: Copyright (c) 2017 Evgeny Poberezkin
+Source: git+https://github.com/epoberezkin/json-schema-traverse.git
+Link: https://github.com/epoberezkin/json-schema-traverse#readme
+-----------
+json-stable-stringify-without-jsonify
+License: MIT
+License File: node_modules/json-stable-stringify-without-jsonify/LICENSE
+Source: git://github.com/samn/json-stable-stringify.git
+Link: https://github.com/samn/json-stable-stringify
+-----------
+json5
+License: MIT
+License File: node_modules/json5/LICENSE.md
+Copyright: Copyright (c) 2012-2018 Aseem Kishore, and [others].
+Source: git+https://github.com/json5/json5.git
+Link: http://json5.org/
+-----------
+keyv
+License: MIT
+Source: git+https://github.com/jaredwray/keyv.git
+Link: https://github.com/jaredwray/keyv
+-----------
+levn
+License: MIT
+License File: node_modules/levn/LICENSE
+Copyright: Copyright (c) George Zahariev
+Source: git://github.com/gkz/levn.git
+Link: https://github.com/gkz/levn
+-----------
+linkify-it
+License: MIT
+License File: node_modules/linkify-it/LICENSE
+Copyright: Copyright (c) 2015 Vitaly Puzrin.
+Source: markdown-it/linkify-it
+Link: markdown-it/linkify-it
+-----------
+livereload-js
+License: MIT
+License File: node_modules/livereload-js/LICENSE
+Copyright: Copyright (c) 2010-2012 Andrey Tarantsov
+Source: git://github.com/livereload/livereload-js.git
+Link: https://github.com/livereload/livereload-js
+-----------
+livereload
+License: MIT
+License File: node_modules/livereload/LICENSE
+Copyright: Copyright (c) 2010 Joshua Peek
+Source: http://github.com/napcs/node-livereload.git
+Link: http://github.com/napcs/node-livereload.git
+-----------
+load-json-file
+License: MIT
+License File: node_modules/load-json-file/license
+Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (sindresorhus.com)
+Source: sindresorhus/load-json-file
+Link: sindresorhus/load-json-file
+-----------
+locate-path
+License: MIT
+License File: node_modules/locate-path/license
+Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (https://sindresorhus.com)
+Source: sindresorhus/locate-path
+Link: sindresorhus/locate-path
+-----------
+lodash.debounce
+License: MIT
+License File: node_modules/lodash.debounce/LICENSE
+Source: lodash/lodash
+Link: https://lodash.com/
+-----------
+lodash.merge
+License: MIT
+License File: node_modules/lodash.merge/LICENSE
+Source: lodash/lodash
+Link: https://lodash.com/
+-----------
+lodash.throttle
+License: MIT
+License File: node_modules/lodash.throttle/LICENSE
+Source: lodash/lodash
+Link: https://lodash.com/
+-----------
+markdown-it-task-lists
+License: ISC
+License File: node_modules/markdown-it-task-lists/LICENSE
+Copyright: Copyright (c) 2016, Revin Guillen
+Source: [email protected]:revin/markdown-it-task-lists.git
+Link: https://github.com/revin/markdown-it-task-lists#readme
+-----------
+markdown-it
+License: MIT
+License File: node_modules/markdown-it/LICENSE
+Copyright: Copyright (c) 2014 Vitaly Puzrin, Alex Kocharin.
+Source: markdown-it/markdown-it
+Link: markdown-it/markdown-it
+-----------
+mdurl
+License: MIT
+License File: node_modules/mdurl/LICENSE
+Copyright: Copyright (c) 2015 Vitaly Puzrin, Alex Kocharin.
+Source: markdown-it/mdurl
+Link: markdown-it/mdurl
+-----------
+memorystream
+License File: node_modules/memorystream/LICENSE
+Copyright: Copyright (C) 2011 Dmitry Nizovtsev
+Source: https://github.com/JSBizon/node-memorystream.git
+Link: https://github.com/JSBizon/node-memorystream
+-----------
+minimatch
+License: ISC
+License File: node_modules/minimatch/LICENSE
+Copyright: Copyright (c) Isaac Z. Schlueter and Contributors
+Source: git://github.com/isaacs/minimatch.git
+Link: git://github.com/isaacs/minimatch.git
+-----------
+minimist
+License: MIT
+License File: node_modules/minimist/LICENSE
+Source: git://github.com/minimistjs/minimist.git
+Link: https://github.com/minimistjs/minimist
+-----------
+ms
+License: MIT
+License File: node_modules/ms/license.md
+Copyright: Copyright (c) 2016 Zeit, Inc.
+Source: zeit/ms
+Link: zeit/ms
+-----------
+natural-compare
+License: MIT
+Source: git://github.com/litejs/natural-compare-lite.git
+Link: git://github.com/litejs/natural-compare-lite.git
+-----------
+nice-try
+License: MIT
+License File: node_modules/nice-try/LICENSE
+Copyright: Copyright (c) 2018 Tobias Reich
+Source: https://github.com/electerious/nice-try.git
+Link: https://github.com/electerious/nice-try
+-----------
+normalize-package-data
+License: BSD-2-Clause
+License File: node_modules/normalize-package-data/LICENSE
+Copyright: Copyright (c) Meryn Stol ("Author")
+All rights reserved.
+Source: git://github.com/npm/normalize-package-data.git
+Link: git://github.com/npm/normalize-package-data.git
+-----------
+normalize-path
+License: MIT
+License File: node_modules/normalize-path/LICENSE
+Copyright: Copyright (c) 2014-2018, Jon Schlinkert.
+Source: jonschlinkert/normalize-path
+Link: https://github.com/jonschlinkert/normalize-path
+-----------
+npm-run-all
+License: MIT
+License File: node_modules/npm-run-all/LICENSE
+Copyright: Copyright (c) 2015 Toru Nagashima
+Source: mysticatea/npm-run-all
+Link: https://github.com/mysticatea/npm-run-all
+-----------
+object-inspect
+License: MIT
+License File: node_modules/object-inspect/LICENSE
+Copyright: Copyright (c) 2013 James Halliday
+Source: git://github.com/inspect-js/object-inspect.git
+Link: https://github.com/inspect-js/object-inspect
+-----------
+object-keys
+License: MIT
+License File: node_modules/object-keys/LICENSE
+Copyright: Copyright (C) 2013 Jordan Harband
+Source: git://github.com/ljharb/object-keys.git
+Link: git://github.com/ljharb/object-keys.git
+-----------
+object.assign
+License: MIT
+License File: node_modules/object.assign/LICENSE
+Copyright: Copyright (c) 2014 Jordan Harband
+Source: git://github.com/ljharb/object.assign.git
+Link: git://github.com/ljharb/object.assign.git
+-----------
+object.entries
+License: MIT
+License File: node_modules/object.entries/LICENSE
+Copyright: Copyright (c) 2015 Jordan Harband
+Source: git://github.com/es-shims/Object.entries.git
+Link: git://github.com/es-shims/Object.entries.git
+-----------
+object.fromentries
+License: MIT
+License File: node_modules/object.fromentries/LICENSE
+Copyright: Copyright (c) 2018 Jordan Harband
+Source: git://github.com/es-shims/Object.fromEntries.git
+Link: git://github.com/es-shims/Object.fromEntries.git
+-----------
+object.groupby
+License: MIT
+License File: node_modules/object.groupby/LICENSE
+Copyright: Copyright (c) 2023 ECMAScript Shims
+Source: git+https://github.com/es-shims/Object.groupBy.git
+Link: https://github.com/es-shims/Object.groupBy#readme
+-----------
+object.values
+License: MIT
+License File: node_modules/object.values/LICENSE
+Copyright: Copyright (c) 2015 Jordan Harband
+Source: git://github.com/es-shims/Object.values.git
+Link: git://github.com/es-shims/Object.values.git
+-----------
+once
+License: ISC
+License File: node_modules/once/LICENSE
+Copyright: Copyright (c) Isaac Z. Schlueter and Contributors
+Source: git://github.com/isaacs/once
+Link: git://github.com/isaacs/once
+-----------
+optionator
+License: MIT
+License File: node_modules/optionator/LICENSE
+Copyright: Copyright (c) George Zahariev
+Source: git://github.com/gkz/optionator.git
+Link: https://github.com/gkz/optionator
+-----------
+opts
+License: BSD-2-Clause
+License File: node_modules/opts/LICENSE.txt
+Copyright: Copyright (c) 2010, Joey Mazzarelli
+All rights reserved.
+Source: github:khtdr/opts
+Link: http://khtdr.com/opts
+-----------
+p-limit
+License: MIT
+License File: node_modules/p-limit/license
+Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (https://sindresorhus.com)
+Source: sindresorhus/p-limit
+Link: sindresorhus/p-limit
+-----------
+p-locate
+License: MIT
+License File: node_modules/p-locate/license
+Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (https://sindresorhus.com)
+Source: sindresorhus/p-locate
+Link: sindresorhus/p-locate
+-----------
+p-try
+License: MIT
+License File: node_modules/p-try/license
+Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (sindresorhus.com)
+Source: sindresorhus/p-try
+Link: sindresorhus/p-try
+-----------
+parent-module
+License: MIT
+License File: node_modules/parent-module/license
+Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (sindresorhus.com)
+Source: sindresorhus/parent-module
+Link: sindresorhus/parent-module
+-----------
+parse-json
+License: MIT
+License File: node_modules/parse-json/license
+Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (sindresorhus.com)
+Source: sindresorhus/parse-json
+Link: sindresorhus/parse-json
+-----------
+path-exists
+License: MIT
+License File: node_modules/path-exists/license
+Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (sindresorhus.com)
+Source: sindresorhus/path-exists
+Link: sindresorhus/path-exists
+-----------
+path-is-absolute
+License: MIT
+License File: node_modules/path-is-absolute/license
+Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (sindresorhus.com)
+Source: sindresorhus/path-is-absolute
+Link: sindresorhus/path-is-absolute
+-----------
+path-key
+License: MIT
+License File: node_modules/path-key/license
+Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (sindresorhus.com)
+Source: sindresorhus/path-key
+Link: sindresorhus/path-key
+-----------
+path-parse
+License: MIT
+License File: node_modules/path-parse/LICENSE
+Copyright: Copyright (c) 2015 Javier Blanco
+Source: https://github.com/jbgutierrez/path-parse.git
+Link: https://github.com/jbgutierrez/path-parse#readme
+-----------
+path-type
+License: MIT
+License File: node_modules/path-type/license
+Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (sindresorhus.com)
+Source: sindresorhus/path-type
+Link: sindresorhus/path-type
+-----------
+picomatch
+License: MIT
+License File: node_modules/picomatch/LICENSE
+Copyright: Copyright (c) 2017-present, Jon Schlinkert.
+Source: micromatch/picomatch
+Link: https://github.com/micromatch/picomatch
+-----------
+pidtree
+License: MIT
+License File: node_modules/pidtree/license
+Copyright: Copyright (c) 2018 Simone Primarosa
+Source: github:simonepri/pidtree
+Link: http://github.com/simonepri/pidtree#readme
+-----------
+pify
+License: MIT
+License File: node_modules/pify/license
+Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (sindresorhus.com)
+Source: sindresorhus/pify
+Link: sindresorhus/pify
+-----------
+possible-typed-array-names
+License: MIT
+License File: node_modules/possible-typed-array-names/LICENSE
+Copyright: Copyright (c) 2024 Jordan Harband
+Source: git+https://github.com/ljharb/possible-typed-array-names.git
+Link: https://github.com/ljharb/possible-typed-array-names#readme
+-----------
+prelude-ls
+License: MIT
+License File: node_modules/prelude-ls/LICENSE
+Copyright: Copyright (c) George Zahariev
+Source: git://github.com/gkz/prelude-ls.git
+Link: http://preludels.com
+-----------
+punycode
+License: MIT
+License File: node_modules/punycode/LICENSE-MIT.txt
+Source: https://github.com/mathiasbynens/punycode.js.git
+Link: https://mths.be/punycode
+-----------
+queue-microtask
+License: MIT
+License File: node_modules/queue-microtask/LICENSE
+Copyright: Copyright (c) Feross Aboukhadijeh
+Source: git://github.com/feross/queue-microtask.git
+Link: https://github.com/feross/queue-microtask
+-----------
+read-pkg
+License: MIT
+License File: node_modules/read-pkg/license
+Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (sindresorhus.com)
+Source: sindresorhus/read-pkg
+Link: sindresorhus/read-pkg
+-----------
+readdirp
+License: MIT
+License File: node_modules/readdirp/LICENSE
+Copyright: Copyright (c) 2012-2019 Thorsten Lorenz, Paul Miller (https://paulmillr.com)
+Source: git://github.com/paulmillr/readdirp.git
+Link: https://github.com/paulmillr/readdirp
+-----------
+regexp.prototype.flags
+License: MIT
+License File: node_modules/regexp.prototype.flags/LICENSE
+Copyright: Copyright (C) 2014 Jordan Harband
+Source: git://github.com/es-shims/RegExp.prototype.flags.git
+Link: git://github.com/es-shims/RegExp.prototype.flags.git
+-----------
+require-directory
+License: MIT
+License File: node_modules/require-directory/LICENSE
+Copyright: Copyright (c) 2011 Troy Goode <*********@*****.***>
+Source: git://github.com/troygoode/node-require-directory.git
+Link: https://github.com/troygoode/node-require-directory/
+-----------
+require-main-filename
+License: ISC
+License File: node_modules/require-main-filename/LICENSE.txt
+Copyright: Copyright (c) 2016, Contributors
+Source: git+ssh://[email protected]/yargs/require-main-filename.git
+Link: https://github.com/yargs/require-main-filename#readme
+-----------
+resolve-from
+License: MIT
+License File: node_modules/resolve-from/license
+Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (sindresorhus.com)
+Source: sindresorhus/resolve-from
+Link: sindresorhus/resolve-from
+-----------
+resolve
+License: MIT
+License File: node_modules/resolve/LICENSE
+Copyright: Copyright (c) 2012 James Halliday
+Source: git://github.com/browserify/resolve.git
+Link: git://github.com/browserify/resolve.git
+-----------
+reusify
+License: MIT
+License File: node_modules/reusify/LICENSE
+Copyright: Copyright (c) 2015 Matteo Collina
+Source: git+https://github.com/mcollina/reusify.git
+Link: https://github.com/mcollina/reusify#readme
+-----------
+rimraf
+License: ISC
+License File: node_modules/rimraf/LICENSE
+Copyright: Copyright (c) Isaac Z. Schlueter and Contributors
+Source: git://github.com/isaacs/rimraf.git
+Link: git://github.com/isaacs/rimraf.git
+-----------
+run-parallel
+License: MIT
+License File: node_modules/run-parallel/LICENSE
+Copyright: Copyright (c) Feross Aboukhadijeh
+Source: git://github.com/feross/run-parallel.git
+Link: https://github.com/feross/run-parallel
+-----------
+safe-array-concat
+License: MIT
+License File: node_modules/safe-array-concat/LICENSE
+Copyright: Copyright (c) 2023 Jordan Harband
+Source: git+https://github.com/ljharb/safe-array-concat.git
+Link: https://github.com/ljharb/safe-array-concat#readme
+-----------
+safe-regex-test
+License: MIT
+License File: node_modules/safe-regex-test/LICENSE
+Copyright: Copyright (c) 2022 Jordan Harband
+Source: git+https://github.com/ljharb/safe-regex-test.git
+Link: https://github.com/ljharb/safe-regex-test#readme
+-----------
+sass
+License: MIT
+License File: node_modules/sass/LICENSE
+Copyright: Copyright (c) 2016, Google Inc.
+Source: https://github.com/sass/dart-sass
+Link: https://github.com/sass/dart-sass
+-----------
+semver
+License: ISC
+License File: node_modules/semver/LICENSE
+Copyright: Copyright (c) Isaac Z. Schlueter and Contributors
+Source: https://github.com/npm/node-semver.git
+Link: https://github.com/npm/node-semver.git
+-----------
+set-blocking
+License: ISC
+License File: node_modules/set-blocking/LICENSE.txt
+Copyright: Copyright (c) 2016, Contributors
+Source: git+https://github.com/yargs/set-blocking.git
+Link: https://github.com/yargs/set-blocking#readme
+-----------
+set-function-length
+License: MIT
+License File: node_modules/set-function-length/LICENSE
+Copyright: Copyright (c) Jordan Harband and contributors
+Source: git+https://github.com/ljharb/set-function-length.git
+Link: https://github.com/ljharb/set-function-length#readme
+-----------
+set-function-name
+License: MIT
+License File: node_modules/set-function-name/LICENSE
+Copyright: Copyright (c) Jordan Harband and contributors
+Source: git+https://github.com/ljharb/set-function-name.git
+Link: https://github.com/ljharb/set-function-name#readme
+-----------
+shebang-command
+License: MIT
+License File: node_modules/shebang-command/license
+Copyright: Copyright (c) Kevin Mårtensson <***************@*****.***> (github.com/kevva)
+Source: kevva/shebang-command
+Link: kevva/shebang-command
+-----------
+shebang-regex
+License: MIT
+License File: node_modules/shebang-regex/license
+Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (sindresorhus.com)
+Source: sindresorhus/shebang-regex
+Link: sindresorhus/shebang-regex
+-----------
+shell-quote
+License: MIT
+License File: node_modules/shell-quote/LICENSE
+Copyright: Copyright (c) 2013 James Halliday (****@********.***)
+Source: http://github.com/ljharb/shell-quote.git
+Link: https://github.com/ljharb/shell-quote
+-----------
+side-channel
+License: MIT
+License File: node_modules/side-channel/LICENSE
+Copyright: Copyright (c) 2019 Jordan Harband
+Source: git+https://github.com/ljharb/side-channel.git
+Link: https://github.com/ljharb/side-channel#readme
+-----------
+snabbdom
+License: MIT
+License File: node_modules/snabbdom/LICENSE
+Copyright: Copyright (c) 2015 Simon Friis Vindum
+Source: git+https://github.com/snabbdom/snabbdom.git
+Link: https://github.com/snabbdom/snabbdom#readme
+-----------
+sortablejs
+License: MIT
+License File: node_modules/sortablejs/LICENSE
+Source: git://github.com/SortableJS/Sortable.git
+Link: git://github.com/SortableJS/Sortable.git
+-----------
+source-map-js
+License: BSD-3-Clause
+License File: node_modules/source-map-js/LICENSE
+Copyright: Copyright (c) 2009-2011, Mozilla Foundation and contributors
+All rights reserved.
+Source: 7rulnik/source-map-js
+Link: https://github.com/7rulnik/source-map-js
+-----------
+spdx-correct
+License: Apache-2.0
+License File: node_modules/spdx-correct/LICENSE
+Source: jslicense/spdx-correct.js
+Link: jslicense/spdx-correct.js
+-----------
+spdx-exceptions
+License: CC-BY-3.0
+Source: kemitchell/spdx-exceptions.json
+Link: kemitchell/spdx-exceptions.json
+-----------
+spdx-expression-parse
+License: MIT
+License File: node_modules/spdx-expression-parse/LICENSE
+Copyright: Copyright (c) 2015 Kyle E. Mitchell & other authors listed in AUTHORS
+Source: jslicense/spdx-expression-parse.js
+Link: jslicense/spdx-expression-parse.js
+-----------
+spdx-license-ids
+License: CC0-1.0
+Source: jslicense/spdx-license-ids
+Link: jslicense/spdx-license-ids
+-----------
+string-width
+License: MIT
+License File: node_modules/string-width/license
+Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (sindresorhus.com)
+Source: sindresorhus/string-width
+Link: sindresorhus/string-width
+-----------
+string.prototype.padend
+License: MIT
+License File: node_modules/string.prototype.padend/LICENSE
+Copyright: Copyright (c) 2015 EcmaScript Shims
+Source: git://github.com/es-shims/String.prototype.padEnd.git
+Link: git://github.com/es-shims/String.prototype.padEnd.git
+-----------
+string.prototype.trim
+License: MIT
+License File: node_modules/string.prototype.trim/LICENSE
+Copyright: Copyright (c) 2015 Jordan Harband
+Source: git://github.com/es-shims/String.prototype.trim.git
+Link: git://github.com/es-shims/String.prototype.trim.git
+-----------
+string.prototype.trimend
+License: MIT
+License File: node_modules/string.prototype.trimend/LICENSE
+Copyright: Copyright (c) 2017 Khaled Al-Ansari
+Source: git://github.com/es-shims/String.prototype.trimEnd.git
+Link: git://github.com/es-shims/String.prototype.trimEnd.git
+-----------
+string.prototype.trimstart
+License: MIT
+License File: node_modules/string.prototype.trimstart/LICENSE
+Copyright: Copyright (c) 2017 Khaled Al-Ansari
+Source: git://github.com/es-shims/String.prototype.trimStart.git
+Link: git://github.com/es-shims/String.prototype.trimStart.git
+-----------
+strip-ansi
+License: MIT
+License File: node_modules/strip-ansi/license
+Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (sindresorhus.com)
+Source: chalk/strip-ansi
+Link: chalk/strip-ansi
+-----------
+strip-bom
+License: MIT
+License File: node_modules/strip-bom/license
+Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (sindresorhus.com)
+Source: sindresorhus/strip-bom
+Link: sindresorhus/strip-bom
+-----------
+strip-json-comments
+License: MIT
+License File: node_modules/strip-json-comments/license
+Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (https://sindresorhus.com)
+Source: sindresorhus/strip-json-comments
+Link: sindresorhus/strip-json-comments
+-----------
+style-mod
+License: MIT
+License File: node_modules/style-mod/LICENSE
+Copyright: Copyright (C) 2018 by Marijn Haverbeke <******@*********.******> and others
+Source: git+https://github.com/marijnh/style-mod.git
+Link: git+https://github.com/marijnh/style-mod.git
+-----------
+supports-color
+License: MIT
+License File: node_modules/supports-color/license
+Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (sindresorhus.com)
+Source: chalk/supports-color
+Link: chalk/supports-color
+-----------
+supports-preserve-symlinks-flag
+License: MIT
+License File: node_modules/supports-preserve-symlinks-flag/LICENSE
+Copyright: Copyright (c) 2022 Inspect JS
+Source: git+https://github.com/inspect-js/node-supports-preserve-symlinks-flag.git
+Link: https://github.com/inspect-js/node-supports-preserve-symlinks-flag#readme
+-----------
+text-table
+License: MIT
+License File: node_modules/text-table/LICENSE
+Source: git://github.com/substack/text-table.git
+Link: https://github.com/substack/text-table
+-----------
+to-regex-range
+License: MIT
+License File: node_modules/to-regex-range/LICENSE
+Copyright: Copyright (c) 2015-present, Jon Schlinkert.
+Source: micromatch/to-regex-range
+Link: https://github.com/micromatch/to-regex-range
+-----------
+tsconfig-paths
+License: MIT
+License File: node_modules/tsconfig-paths/LICENSE
+Copyright: Copyright (c) 2016 Jonas Kello
+Source: https://github.com/dividab/tsconfig-paths
+Link: https://github.com/dividab/tsconfig-paths
+-----------
+type-check
+License: MIT
+License File: node_modules/type-check/LICENSE
+Copyright: Copyright (c) George Zahariev
+Source: git://github.com/gkz/type-check.git
+Link: https://github.com/gkz/type-check
+-----------
+type-fest
+License: (MIT OR CC0-1.0)
+License File: node_modules/type-fest/license
+Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (https:/sindresorhus.com)
+Source: sindresorhus/type-fest
+Link: sindresorhus/type-fest
+-----------
+typed-array-buffer
+License: MIT
+License File: node_modules/typed-array-buffer/LICENSE
+Copyright: Copyright (c) 2023 Jordan Harband
+Source: git+https://github.com/ljharb/typed-array-buffer.git
+Link: https://github.com/ljharb/typed-array-buffer#readme
+-----------
+typed-array-byte-length
+License: MIT
+License File: node_modules/typed-array-byte-length/LICENSE
+Copyright: Copyright (c) 2020 Inspect JS
+Source: git+https://github.com/inspect-js/typed-array-byte-length.git
+Link: https://github.com/inspect-js/typed-array-byte-length#readme
+-----------
+typed-array-byte-offset
+License: MIT
+License File: node_modules/typed-array-byte-offset/LICENSE
+Copyright: Copyright (c) 2020 Inspect JS
+Source: git+https://github.com/inspect-js/typed-array-byte-offset.git
+Link: https://github.com/inspect-js/typed-array-byte-offset#readme
+-----------
+typed-array-length
+License: MIT
+License File: node_modules/typed-array-length/LICENSE
+Copyright: Copyright (c) 2020 Inspect JS
+Source: git+https://github.com/inspect-js/typed-array-length.git
+Link: https://github.com/inspect-js/typed-array-length#readme
+-----------
+uc.micro
+License: MIT
+License File: node_modules/uc.micro/LICENSE.txt
+Source: markdown-it/uc.micro
+Link: markdown-it/uc.micro
+-----------
+unbox-primitive
+License: MIT
+License File: node_modules/unbox-primitive/LICENSE
+Copyright: Copyright (c) 2019 Jordan Harband
+Source: git+https://github.com/ljharb/unbox-primitive.git
+Link: https://github.com/ljharb/unbox-primitive#readme
+-----------
+uri-js
+License: BSD-2-Clause
+License File: node_modules/uri-js/LICENSE
+Copyright: Copyright 2011 Gary Court. All rights reserved.
+Source: http://github.com/garycourt/uri-js
+Link: https://github.com/garycourt/uri-js
+-----------
+validate-npm-package-license
+License: Apache-2.0
+License File: node_modules/validate-npm-package-license/LICENSE
+Source: kemitchell/validate-npm-package-license.js
+Link: kemitchell/validate-npm-package-license.js
+-----------
+w3c-keyname
+License: MIT
+License File: node_modules/w3c-keyname/LICENSE
+Copyright: Copyright (C) 2016 by Marijn Haverbeke <******@*********.******> and others
+Source: git+https://github.com/marijnh/w3c-keyname.git
+Link: https://github.com/marijnh/w3c-keyname#readme
+-----------
+which-boxed-primitive
+License: MIT
+License File: node_modules/which-boxed-primitive/LICENSE
+Copyright: Copyright (c) 2019 Jordan Harband
+Source: git+https://github.com/inspect-js/which-boxed-primitive.git
+Link: https://github.com/inspect-js/which-boxed-primitive#readme
+-----------
+which-module
+License: ISC
+License File: node_modules/which-module/LICENSE
+Copyright: Copyright (c) 2016, Contributors
+Source: git+https://github.com/nexdrew/which-module.git
+Link: https://github.com/nexdrew/which-module#readme
+-----------
+which-typed-array
+License: MIT
+License File: node_modules/which-typed-array/LICENSE
+Copyright: Copyright (c) 2015 Jordan Harband
+Source: git://github.com/inspect-js/which-typed-array.git
+Link: git://github.com/inspect-js/which-typed-array.git
+-----------
+which
+License: ISC
+License File: node_modules/which/LICENSE
+Copyright: Copyright (c) Isaac Z. Schlueter and Contributors
+Source: git://github.com/isaacs/node-which.git
+Link: git://github.com/isaacs/node-which.git
+-----------
+wrap-ansi
+License: MIT
+License File: node_modules/wrap-ansi/license
+Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (sindresorhus.com)
+Source: chalk/wrap-ansi
+Link: chalk/wrap-ansi
+-----------
+wrappy
+License: ISC
+License File: node_modules/wrappy/LICENSE
+Copyright: Copyright (c) Isaac Z. Schlueter and Contributors
+Source: https://github.com/npm/wrappy
+Link: https://github.com/npm/wrappy
+-----------
+ws
+License: MIT
+License File: node_modules/ws/LICENSE
+Copyright: Copyright (c) 2011 Einar Otto Stangvik <*******@*****.***>
+Source: websockets/ws
+Link: https://github.com/websockets/ws
+-----------
+y18n
+License: ISC
+License File: node_modules/y18n/LICENSE
+Copyright: Copyright (c) 2015, Contributors
+Source: [email protected]:yargs/y18n.git
+Link: https://github.com/yargs/y18n
+-----------
+yargs-parser
+License: ISC
+License File: node_modules/yargs-parser/LICENSE.txt
+Copyright: Copyright (c) 2016, Contributors
+Source: [email protected]:yargs/yargs-parser.git
+Link: [email protected]:yargs/yargs-parser.git
+-----------
+yargs
+License: MIT
+License File: node_modules/yargs/LICENSE
+Copyright: Copyright 2010 James Halliday (****@********.***)
+Modified work Copyright 2014 Contributors (***@*****.***)
+Source: https://github.com/yargs/yargs.git
+Link: https://yargs.js.org/
+-----------
+yocto-queue
+License: MIT
+License File: node_modules/yocto-queue/license
+Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (https://sindresorhus.com)
+Source: sindresorhus/yocto-queue
+Link: sindresorhus/yocto-queue
+-----------
+@aashutoshrathi/word-wrap
+License: MIT
+License File: node_modules/@aashutoshrathi/word-wrap/LICENSE
+Copyright: Copyright (c) 2014-2016, Jon Schlinkert
+Source: git+https://github.com/aashutoshrathi/word-wrap.git
+Link: https://github.com/aashutoshrathi/word-wrap
+-----------
+@codemirror/autocomplete
+License: MIT
+License File: node_modules/@codemirror/autocomplete/LICENSE
+Copyright: Copyright (C) 2018-2021 by Marijn Haverbeke <******@*********.******> and others
+Source: https://github.com/codemirror/autocomplete.git
+Link: https://github.com/codemirror/autocomplete.git
+-----------
+@codemirror/commands
+License: MIT
+License File: node_modules/@codemirror/commands/LICENSE
+Copyright: Copyright (C) 2018-2021 by Marijn Haverbeke <******@*********.******> and others
+Source: https://github.com/codemirror/commands.git
+Link: https://github.com/codemirror/commands.git
+-----------
+@codemirror/lang-css
+License: MIT
+License File: node_modules/@codemirror/lang-css/LICENSE
+Copyright: Copyright (C) 2018-2021 by Marijn Haverbeke <******@*********.******> and others
+Source: https://github.com/codemirror/lang-css.git
+Link: https://github.com/codemirror/lang-css.git
+-----------
+@codemirror/lang-html
+License: MIT
+License File: node_modules/@codemirror/lang-html/LICENSE
+Copyright: Copyright (C) 2018-2021 by Marijn Haverbeke <******@*********.******> and others
+Source: https://github.com/codemirror/lang-html.git
+Link: https://github.com/codemirror/lang-html.git
+-----------
+@codemirror/lang-javascript
+License: MIT
+License File: node_modules/@codemirror/lang-javascript/LICENSE
+Copyright: Copyright (C) 2018-2021 by Marijn Haverbeke <******@*********.******> and others
+Source: https://github.com/codemirror/lang-javascript.git
+Link: https://github.com/codemirror/lang-javascript.git
+-----------
+@codemirror/lang-json
+License: MIT
+License File: node_modules/@codemirror/lang-json/LICENSE
+Copyright: Copyright (C) 2018-2021 by Marijn Haverbeke <*******@*****.***> and others
+Source: https://github.com/codemirror/lang-json.git
+Link: https://github.com/codemirror/lang-json.git
+-----------
+@codemirror/lang-markdown
+License: MIT
+License File: node_modules/@codemirror/lang-markdown/LICENSE
+Copyright: Copyright (C) 2018-2021 by Marijn Haverbeke <******@*********.******> and others
+Source: https://github.com/codemirror/lang-markdown.git
+Link: https://github.com/codemirror/lang-markdown.git
+-----------
+@codemirror/lang-php
+License: MIT
+License File: node_modules/@codemirror/lang-php/LICENSE
+Copyright: Copyright (C) 2018-2021 by Marijn Haverbeke <*******@*****.***> and others
+Source: https://github.com/codemirror/lang-php.git
+Link: https://github.com/codemirror/lang-php.git
+-----------
+@codemirror/lang-xml
+License: MIT
+License File: node_modules/@codemirror/lang-xml/LICENSE
+Copyright: Copyright (C) 2018-2021 by Marijn Haverbeke <*******@*****.***> and others
+Source: https://github.com/codemirror/lang-xml.git
+Link: https://github.com/codemirror/lang-xml.git
+-----------
+@codemirror/language
+License: MIT
+License File: node_modules/@codemirror/language/LICENSE
+Copyright: Copyright (C) 2018-2021 by Marijn Haverbeke <******@*********.******> and others
+Source: https://github.com/codemirror/language.git
+Link: https://github.com/codemirror/language.git
+-----------
+@codemirror/legacy-modes
+License: MIT
+License File: node_modules/@codemirror/legacy-modes/LICENSE
+Copyright: Copyright (C) 2018-2021 by Marijn Haverbeke <******@*********.******> and others
+Source: https://github.com/codemirror/legacy-modes.git
+Link: https://github.com/codemirror/legacy-modes.git
+-----------
+@codemirror/lint
+License: MIT
+License File: node_modules/@codemirror/lint/LICENSE
+Copyright: Copyright (C) 2018-2021 by Marijn Haverbeke <******@*********.******> and others
+Source: https://github.com/codemirror/lint.git
+Link: https://github.com/codemirror/lint.git
+-----------
+@codemirror/search
+License: MIT
+License File: node_modules/@codemirror/search/LICENSE
+Copyright: Copyright (C) 2018-2021 by Marijn Haverbeke <******@*********.******> and others
+Source: https://github.com/codemirror/search.git
+Link: https://github.com/codemirror/search.git
+-----------
+@codemirror/state
+License: MIT
+License File: node_modules/@codemirror/state/LICENSE
+Copyright: Copyright (C) 2018-2021 by Marijn Haverbeke <******@*********.******> and others
+Source: https://github.com/codemirror/state.git
+Link: https://github.com/codemirror/state.git
+-----------
+@codemirror/theme-one-dark
+License: MIT
+License File: node_modules/@codemirror/theme-one-dark/LICENSE
+Copyright: Copyright (C) 2018-2021 by Marijn Haverbeke <******@*********.******> and others
+Source: https://github.com/codemirror/theme-one-dark.git
+Link: https://github.com/codemirror/theme-one-dark.git
+-----------
+@codemirror/view
+License: MIT
+License File: node_modules/@codemirror/view/LICENSE
+Copyright: Copyright (C) 2018-2021 by Marijn Haverbeke <******@*********.******> and others
+Source: https://github.com/codemirror/view.git
+Link: https://github.com/codemirror/view.git
+-----------
+@esbuild/linux-x64
+License: MIT
+Source: git+https://github.com/evanw/esbuild.git
+Link: git+https://github.com/evanw/esbuild.git
+-----------
+@eslint-community/eslint-utils
+License: MIT
+License File: node_modules/@eslint-community/eslint-utils/LICENSE
+Copyright: Copyright (c) 2018 Toru Nagashima
+Source: https://github.com/eslint-community/eslint-utils
+Link: https://github.com/eslint-community/eslint-utils#readme
+-----------
+@eslint-community/regexpp
+License: MIT
+License File: node_modules/@eslint-community/regexpp/LICENSE
+Copyright: Copyright (c) 2018 Toru Nagashima
+Source: https://github.com/eslint-community/regexpp
+Link: https://github.com/eslint-community/regexpp#readme
+-----------
+@eslint/eslintrc
+License: MIT
+License File: node_modules/@eslint/eslintrc/LICENSE
+Source: eslint/eslintrc
+Link: https://github.com/eslint/eslintrc#readme
+-----------
+@eslint/js
+License: MIT
+License File: node_modules/@eslint/js/LICENSE
+Source: https://github.com/eslint/eslint.git
+Link: https://eslint.org
+-----------
+@humanwhocodes/config-array
+License: Apache-2.0
+License File: node_modules/@humanwhocodes/config-array/LICENSE
+Source: git+https://github.com/humanwhocodes/config-array.git
+Link: https://github.com/humanwhocodes/config-array#readme
+-----------
+@humanwhocodes/module-importer
+License: Apache-2.0
+License File: node_modules/@humanwhocodes/module-importer/LICENSE
+Source: git+https://github.com/humanwhocodes/module-importer.git
+Link: git+https://github.com/humanwhocodes/module-importer.git
+-----------
+@humanwhocodes/object-schema
+License: BSD-3-Clause
+License File: node_modules/@humanwhocodes/object-schema/LICENSE
+Copyright: Copyright (c) 2019, Human Who Codes
+All rights reserved.
+Source: git+https://github.com/humanwhocodes/object-schema.git
+Link: https://github.com/humanwhocodes/object-schema#readme
+-----------
+@lezer/common
+License: MIT
+License File: node_modules/@lezer/common/LICENSE
+Copyright: Copyright (C) 2018 by Marijn Haverbeke <******@*********.******> and others
+Source: https://github.com/lezer-parser/common.git
+Link: https://github.com/lezer-parser/common.git
+-----------
+@lezer/css
+License: MIT
+License File: node_modules/@lezer/css/LICENSE
+Copyright: Copyright (C) 2018 by Marijn Haverbeke <******@*********.******> and others
+Source: https://github.com/lezer-parser/css.git
+Link: https://github.com/lezer-parser/css.git
+-----------
+@lezer/generator
+License: MIT
+License File: node_modules/@lezer/generator/LICENSE
+Copyright: Copyright (C) 2018 by Marijn Haverbeke <******@*********.******> and others
+Source: https://github.com/lezer-parser/generator.git
+Link: https://github.com/lezer-parser/generator.git
+-----------
+@lezer/highlight
+License: MIT
+License File: node_modules/@lezer/highlight/LICENSE
+Copyright: Copyright (C) 2018 by Marijn Haverbeke <******@*********.******> and others
+Source: https://github.com/lezer-parser/highlight.git
+Link: https://github.com/lezer-parser/highlight.git
+-----------
+@lezer/html
+License: MIT
+License File: node_modules/@lezer/html/LICENSE
+Copyright: Copyright (C) 2018 by Marijn Haverbeke <******@*********.******> and others
+Source: https://github.com/lezer-parser/html.git
+Link: https://github.com/lezer-parser/html.git
+-----------
+@lezer/javascript
+License: MIT
+License File: node_modules/@lezer/javascript/LICENSE
+Copyright: Copyright (C) 2018 by Marijn Haverbeke <******@*********.******> and others
+Source: https://github.com/lezer-parser/javascript.git
+Link: https://github.com/lezer-parser/javascript.git
+-----------
+@lezer/json
+License: MIT
+License File: node_modules/@lezer/json/LICENSE
+Copyright: Copyright (C) 2020 by Marijn Haverbeke <******@*********.******>, Arun Srinivasan <*******@*****.***>, and others
+Source: https://github.com/lezer-parser/json.git
+Link: https://github.com/lezer-parser/json.git
+-----------
+@lezer/lr
+License: MIT
+License File: node_modules/@lezer/lr/LICENSE
+Copyright: Copyright (C) 2018 by Marijn Haverbeke <******@*********.******> and others
+Source: https://github.com/lezer-parser/lr.git
+Link: https://github.com/lezer-parser/lr.git
+-----------
+@lezer/markdown
+License: MIT
+License File: node_modules/@lezer/markdown/LICENSE
+Copyright: Copyright (C) 2020 by Marijn Haverbeke <******@*********.******> and others
+Source: https://github.com/lezer-parser/markdown.git
+Link: https://github.com/lezer-parser/markdown.git
+-----------
+@lezer/php
+License: MIT
+License File: node_modules/@lezer/php/LICENSE
+Copyright: Copyright (C) 2018 by Marijn Haverbeke <******@*********.******> and others
+Source: https://github.com/lezer-parser/php.git
+Link: https://github.com/lezer-parser/php.git
+-----------
+@lezer/xml
+License: MIT
+License File: node_modules/@lezer/xml/LICENSE
+Copyright: Copyright (C) 2018 by Marijn Haverbeke <******@*********.******> and others
+Source: https://github.com/lezer-parser/xml.git
+Link: https://github.com/lezer-parser/xml.git
+-----------
+@nodelib/fs.scandir
+License: MIT
+License File: node_modules/@nodelib/fs.scandir/LICENSE
+Copyright: Copyright (c) Denis Malinochkin
+Source: https://github.com/nodelib/nodelib/tree/master/packages/fs/fs.scandir
+Link: https://github.com/nodelib/nodelib/tree/master/packages/fs/fs.scandir
+-----------
+@nodelib/fs.stat
+License: MIT
+License File: node_modules/@nodelib/fs.stat/LICENSE
+Copyright: Copyright (c) Denis Malinochkin
+Source: https://github.com/nodelib/nodelib/tree/master/packages/fs/fs.stat
+Link: https://github.com/nodelib/nodelib/tree/master/packages/fs/fs.stat
+-----------
+@nodelib/fs.walk
+License: MIT
+License File: node_modules/@nodelib/fs.walk/LICENSE
+Copyright: Copyright (c) Denis Malinochkin
+Source: https://github.com/nodelib/nodelib/tree/master/packages/fs/fs.walk
+Link: https://github.com/nodelib/nodelib/tree/master/packages/fs/fs.walk
+-----------
+@ssddanbrown/codemirror-lang-smarty
+License: MIT
+License File: node_modules/@ssddanbrown/codemirror-lang-smarty/LICENSE
+Copyright: Copyright (C) 2023 by Dan Brown, Marijn Haverbeke and others
+-----------
+@ssddanbrown/codemirror-lang-twig
+License: MIT
+License File: node_modules/@ssddanbrown/codemirror-lang-twig/LICENSE
+Copyright: Copyright (C) 2023 by Dan Brown, Marijn Haverbeke and others
+-----------
+@types/json5
+License: MIT
+Source: https://www.github.com/DefinitelyTyped/DefinitelyTyped.git
+Link: https://www.github.com/DefinitelyTyped/DefinitelyTyped.git
+-----------
+@ungap/structured-clone
+License: ISC
+License File: node_modules/@ungap/structured-clone/LICENSE
+Copyright: Copyright (c) 2021, Andrea Giammarchi, @WebReflection
+Source: git+https://github.com/ungap/structured-clone.git
+Link: https://github.com/ungap/structured-clone#readme
diff --git a/dev/licensing/php-library-licenses.txt b/dev/licensing/php-library-licenses.txt
new file mode 100644 (file)
index 0000000..2e78ab8
--- /dev/null
@@ -0,0 +1,796 @@
+aws/aws-crt-php
+License: Apache-2.0
+License File: vendor/aws/aws-crt-php/LICENSE
+Source: https://github.com/awslabs/aws-crt-php.git
+Link: https://github.com/awslabs/aws-crt-php
+-----------
+aws/aws-sdk-php
+License: Apache-2.0
+License File: vendor/aws/aws-sdk-php/LICENSE
+Source: https://github.com/aws/aws-sdk-php.git
+Link: http://aws.amazon.com/sdkforphp
+-----------
+bacon/bacon-qr-code
+License: BSD-2-Clause
+License File: vendor/bacon/bacon-qr-code/LICENSE
+Copyright: Copyright (c) 2017, Ben Scholzen 'DASPRiD'
+All rights reserved.
+Source: https://github.com/Bacon/BaconQrCode.git
+Link: https://github.com/Bacon/BaconQrCode
+-----------
+barryvdh/laravel-dompdf
+License: MIT
+License File: vendor/barryvdh/laravel-dompdf/LICENSE
+Copyright: Copyright (c) 2021 barryvdh
+Source: https://github.com/barryvdh/laravel-dompdf.git
+Link: https://github.com/barryvdh/laravel-dompdf.git
+-----------
+barryvdh/laravel-snappy
+License: MIT
+License File: vendor/barryvdh/laravel-snappy/LICENSE
+Copyright: Copyright (c) 2018
+Source: https://github.com/barryvdh/laravel-snappy.git
+Link: https://github.com/barryvdh/laravel-snappy.git
+-----------
+brick/math
+License: MIT
+License File: vendor/brick/math/LICENSE
+Copyright: Copyright (c) 2013-present Benjamin Morel
+Source: https://github.com/brick/math.git
+Link: https://github.com/brick/math.git
+-----------
+carbonphp/carbon-doctrine-types
+License: MIT
+License File: vendor/carbonphp/carbon-doctrine-types/LICENSE
+Copyright: Copyright (c) 2023 Carbon
+Source: https://github.com/CarbonPHP/carbon-doctrine-types.git
+Link: https://github.com/CarbonPHP/carbon-doctrine-types.git
+-----------
+dasprid/enum
+License: BSD-2-Clause
+License File: vendor/dasprid/enum/LICENSE
+Copyright: Copyright (c) 2017, Ben Scholzen 'DASPRiD'
+All rights reserved.
+Source: https://github.com/DASPRiD/Enum.git
+Link: https://github.com/DASPRiD/Enum.git
+-----------
+dflydev/dot-access-data
+License: MIT
+License File: vendor/dflydev/dot-access-data/LICENSE
+Copyright: Copyright (c) 2012 Dragonfly Development Inc.
+Source: https://github.com/dflydev/dflydev-dot-access-data.git
+Link: https://github.com/dflydev/dflydev-dot-access-data
+-----------
+doctrine/cache
+License: MIT
+License File: vendor/doctrine/cache/LICENSE
+Copyright: Copyright (c) 2006-2015 Doctrine Project
+Source: https://github.com/doctrine/cache.git
+Link: https://www.doctrine-project.org/projects/cache.html
+-----------
+doctrine/dbal
+License: MIT
+License File: vendor/doctrine/dbal/LICENSE
+Copyright: Copyright (c) 2006-2018 Doctrine Project
+Source: https://github.com/doctrine/dbal.git
+Link: https://www.doctrine-project.org/projects/dbal.html
+-----------
+doctrine/deprecations
+License: MIT
+License File: vendor/doctrine/deprecations/LICENSE
+Copyright: Copyright (c) 2020-2021 Doctrine Project
+Source: https://github.com/doctrine/deprecations.git
+Link: https://www.doctrine-project.org/
+-----------
+doctrine/event-manager
+License: MIT
+License File: vendor/doctrine/event-manager/LICENSE
+Copyright: Copyright (c) 2006-2015 Doctrine Project
+Source: https://github.com/doctrine/event-manager.git
+Link: https://www.doctrine-project.org/projects/event-manager.html
+-----------
+doctrine/inflector
+License: MIT
+License File: vendor/doctrine/inflector/LICENSE
+Copyright: Copyright (c) 2006-2015 Doctrine Project
+Source: https://github.com/doctrine/inflector.git
+Link: https://www.doctrine-project.org/projects/inflector.html
+-----------
+doctrine/lexer
+License: MIT
+License File: vendor/doctrine/lexer/LICENSE
+Copyright: Copyright (c) 2006-2018 Doctrine Project
+Source: https://github.com/doctrine/lexer.git
+Link: https://www.doctrine-project.org/projects/lexer.html
+-----------
+dompdf/dompdf
+License: LGPL-2.1
+License File: vendor/dompdf/dompdf/LICENSE.LGPL
+Copyright: Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+Source: https://github.com/dompdf/dompdf.git
+Link: https://github.com/dompdf/dompdf
+-----------
+dragonmantank/cron-expression
+License: MIT
+License File: vendor/dragonmantank/cron-expression/LICENSE
+Copyright: Copyright (c) 2011 Michael Dowling <*********@*****.***>, 2016 Chris Tankersley <*****@***********.***>, and contributors
+Source: https://github.com/dragonmantank/cron-expression.git
+Link: https://github.com/dragonmantank/cron-expression.git
+-----------
+egulias/email-validator
+License: MIT
+License File: vendor/egulias/email-validator/LICENSE
+Copyright: Copyright (c) 2013-2023 Eduardo Gulias Davis
+Source: https://github.com/egulias/EmailValidator.git
+Link: https://github.com/egulias/EmailValidator
+-----------
+fruitcake/php-cors
+License: MIT
+License File: vendor/fruitcake/php-cors/LICENSE
+Copyright: Copyright (c) 2013-2017 Alexander <***.*****@*****.***>
+Copyright (c) 2017-2022 Barryvdh <********@*****.***>
+Source: https://github.com/fruitcake/php-cors.git
+Link: https://github.com/fruitcake/php-cors
+-----------
+graham-campbell/result-type
+License: MIT
+License File: vendor/graham-campbell/result-type/LICENSE
+Copyright: Copyright (c) 2020-2023 Graham Campbell <*****@**********.**.**>
+Source: https://github.com/GrahamCampbell/Result-Type.git
+Link: https://github.com/GrahamCampbell/Result-Type.git
+-----------
+guzzlehttp/guzzle
+License: MIT
+License File: vendor/guzzlehttp/guzzle/LICENSE
+Copyright: Copyright (c) 2011 Michael Dowling <*********@*****.***>
+Copyright (c) 2012 Jeremy Lindblom <**********@*****.***>
+Copyright (c) 2014 Graham Campbell <*****@**********.**.**>
+Copyright (c) 2015 Márk Sági-Kazár <****.*********@*****.***>
+Copyright (c) 2015 Tobias Schultze <*********@**********.**>
+Copyright (c) 2016 Tobias Nyholm <******.******@*****.***>
+Copyright (c) 2016 George Mponos <*******@*****.***>
+Source: https://github.com/guzzle/guzzle.git
+Link: https://github.com/guzzle/guzzle.git
+-----------
+guzzlehttp/promises
+License: MIT
+License File: vendor/guzzlehttp/promises/LICENSE
+Copyright: Copyright (c) 2015 Michael Dowling <*********@*****.***>
+Copyright (c) 2015 Graham Campbell <*****@**********.**.**>
+Copyright (c) 2017 Tobias Schultze <*********@**********.**>
+Copyright (c) 2020 Tobias Nyholm <******.******@*****.***>
+Source: https://github.com/guzzle/promises.git
+Link: https://github.com/guzzle/promises.git
+-----------
+guzzlehttp/psr7
+License: MIT
+License File: vendor/guzzlehttp/psr7/LICENSE
+Copyright: Copyright (c) 2015 Michael Dowling <*********@*****.***>
+Copyright (c) 2015 Márk Sági-Kazár <****.*********@*****.***>
+Copyright (c) 2015 Graham Campbell <*****@**********.**.**>
+Copyright (c) 2016 Tobias Schultze <*********@**********.**>
+Copyright (c) 2016 George Mponos <*******@*****.***>
+Copyright (c) 2018 Tobias Nyholm <******.******@*****.***>
+Source: https://github.com/guzzle/psr7.git
+Link: https://github.com/guzzle/psr7.git
+-----------
+guzzlehttp/uri-template
+License: MIT
+License File: vendor/guzzlehttp/uri-template/LICENSE
+Copyright: Copyright (c) 2014 Michael Dowling <*********@*****.***>
+Copyright (c) 2020 George Mponos <*******@*****.***>
+Copyright (c) 2020 Graham Campbell <*****@**********.**.**>
+Source: https://github.com/guzzle/uri-template.git
+Link: https://github.com/guzzle/uri-template.git
+-----------
+intervention/gif
+License: MIT
+License File: vendor/intervention/gif/LICENSE
+Copyright: Copyright (c) 2020 Oliver Vogel
+Source: https://github.com/Intervention/gif.git
+Link: https://github.com/intervention/gif
+-----------
+intervention/image
+License: MIT
+License File: vendor/intervention/image/LICENSE
+Copyright: Copyright (c) 2013-2024 Oliver Vogel
+Source: https://github.com/Intervention/image.git
+Link: https://image.intervention.io/
+-----------
+knplabs/knp-snappy
+License: MIT
+License File: vendor/knplabs/knp-snappy/LICENSE
+Copyright: Copyright (c) 2010 Matthieu Bontemps
+Source: https://github.com/KnpLabs/snappy.git
+Link: http://github.com/KnpLabs/snappy
+-----------
+laravel/framework
+License: MIT
+License File: vendor/laravel/framework/LICENSE.md
+Copyright: Copyright (c) Taylor Otwell
+Source: https://github.com/laravel/framework.git
+Link: https://laravel.com
+-----------
+laravel/prompts
+License: MIT
+License File: vendor/laravel/prompts/LICENSE.md
+Copyright: Copyright (c) Taylor Otwell
+Source: https://github.com/laravel/prompts.git
+Link: https://github.com/laravel/prompts.git
+-----------
+laravel/serializable-closure
+License: MIT
+License File: vendor/laravel/serializable-closure/LICENSE.md
+Copyright: Copyright (c) Taylor Otwell
+Source: https://github.com/laravel/serializable-closure.git
+Link: https://github.com/laravel/serializable-closure.git
+-----------
+laravel/socialite
+License: MIT
+License File: vendor/laravel/socialite/LICENSE.md
+Copyright: Copyright (c) Taylor Otwell
+Source: https://github.com/laravel/socialite.git
+Link: https://laravel.com
+-----------
+laravel/tinker
+License: MIT
+License File: vendor/laravel/tinker/LICENSE.md
+Copyright: Copyright (c) Taylor Otwell
+Source: https://github.com/laravel/tinker.git
+Link: https://github.com/laravel/tinker.git
+-----------
+league/commonmark
+License: BSD-3-Clause
+License File: vendor/league/commonmark/LICENSE
+Copyright: Copyright (c) 2014-2022, Colin O'Dell. All rights reserved. Some code based on commonmark.js (copyright 2014-2018, John MacFarlane) and commonmark-java (copyright 2015-2016, Atlassian Pty Ltd)
+Source: https://github.com/thephpleague/commonmark.git
+Link: https://commonmark.thephpleague.com
+-----------
+league/config
+License: BSD-3-Clause
+License File: vendor/league/config/LICENSE.md
+Copyright: Copyright (c) 2022, Colin O'Dell. All rights reserved.
+Source: https://github.com/thephpleague/config.git
+Link: https://config.thephpleague.com
+-----------
+league/flysystem
+License: MIT
+License File: vendor/league/flysystem/LICENSE
+Copyright: Copyright (c) 2013-2024 Frank de Jonge
+Source: https://github.com/thephpleague/flysystem.git
+Link: https://github.com/thephpleague/flysystem.git
+-----------
+league/flysystem-aws-s3-v3
+License: MIT
+License File: vendor/league/flysystem-aws-s3-v3/LICENSE
+Copyright: Copyright (c) 2013-2024 Frank de Jonge
+Source: https://github.com/thephpleague/flysystem-aws-s3-v3.git
+Link: https://github.com/thephpleague/flysystem-aws-s3-v3.git
+-----------
+league/flysystem-local
+License: MIT
+License File: vendor/league/flysystem-local/LICENSE
+Copyright: Copyright (c) 2013-2024 Frank de Jonge
+Source: https://github.com/thephpleague/flysystem-local.git
+Link: https://github.com/thephpleague/flysystem-local.git
+-----------
+league/html-to-markdown
+License: MIT
+License File: vendor/league/html-to-markdown/LICENSE
+Copyright: Copyright (c) 2015 Colin O'Dell; Originally created by Nick Cernis
+Source: https://github.com/thephpleague/html-to-markdown.git
+Link: https://github.com/thephpleague/html-to-markdown
+-----------
+league/mime-type-detection
+License: MIT
+License File: vendor/league/mime-type-detection/LICENSE
+Copyright: Copyright (c) 2013-2023 Frank de Jonge
+Source: https://github.com/thephpleague/mime-type-detection.git
+Link: https://github.com/thephpleague/mime-type-detection.git
+-----------
+league/oauth1-client
+License: MIT
+License File: vendor/league/oauth1-client/LICENSE
+Copyright: Copyright (c) 2013 Ben Corlett <**********@**.***>
+Source: https://github.com/thephpleague/oauth1-client.git
+Link: https://github.com/thephpleague/oauth1-client.git
+-----------
+league/oauth2-client
+License: MIT
+License File: vendor/league/oauth2-client/LICENSE
+Copyright: Copyright (c) 2013-2020 Alex Bilbie <*****@**********.***>
+Source: https://github.com/thephpleague/oauth2-client.git
+Link: https://github.com/thephpleague/oauth2-client.git
+-----------
+masterminds/html5
+License: MIT
+License File: vendor/masterminds/html5/LICENSE.txt
+Copyright: Copyright (c) 2013 The Authors of HTML5-PHP
+Source: https://github.com/Masterminds/html5-php.git
+Link: http://masterminds.github.io/html5-php
+-----------
+monolog/monolog
+License: MIT
+License File: vendor/monolog/monolog/LICENSE
+Copyright: Copyright (c) 2011-2020 Jordi Boggiano
+Source: https://github.com/Seldaek/monolog.git
+Link: https://github.com/Seldaek/monolog
+-----------
+mtdowling/jmespath.php
+License: MIT
+License File: vendor/mtdowling/jmespath.php/LICENSE
+Copyright: Copyright (c) 2014 Michael Dowling, https://github.com/mtdowling
+Source: https://github.com/jmespath/jmespath.php.git
+Link: https://github.com/jmespath/jmespath.php.git
+-----------
+nesbot/carbon
+License: MIT
+License File: vendor/nesbot/carbon/LICENSE
+Copyright: Copyright (C) Brian Nesbitt
+Source: https://github.com/briannesbitt/Carbon.git
+Link: https://carbon.nesbot.com
+-----------
+nette/schema
+License: BSD-3-Clause GPL-2.0-only GPL-3.0-only
+License File: vendor/nette/schema/license.md
+Copyright: Copyright (c) 2004, 2014 David Grudl (https://davidgrudl.com)
+All rights reserved.
+Source: https://github.com/nette/schema.git
+Link: https://nette.org
+-----------
+nette/utils
+License: BSD-3-Clause GPL-2.0-only GPL-3.0-only
+License File: vendor/nette/utils/license.md
+Copyright: Copyright (c) 2004, 2014 David Grudl (https://davidgrudl.com)
+All rights reserved.
+Source: https://github.com/nette/utils.git
+Link: https://nette.org
+-----------
+nikic/php-parser
+License: BSD-3-Clause
+License File: vendor/nikic/php-parser/LICENSE
+Copyright: Copyright (c) 2011, Nikita Popov
+All rights reserved.
+Source: https://github.com/nikic/PHP-Parser.git
+Link: https://github.com/nikic/PHP-Parser.git
+-----------
+nunomaduro/termwind
+License: MIT
+License File: vendor/nunomaduro/termwind/LICENSE.md
+Copyright: Copyright (c) Nuno Maduro <***********@*****.***>
+Source: https://github.com/nunomaduro/termwind.git
+Link: https://github.com/nunomaduro/termwind.git
+-----------
+onelogin/php-saml
+License: MIT
+License File: vendor/onelogin/php-saml/LICENSE
+Copyright: Copyright (c) 2010-2016 OneLogin, Inc.
+Source: https://github.com/onelogin/php-saml.git
+Link: https://developers.onelogin.com/saml/php
+-----------
+paragonie/constant_time_encoding
+License: MIT
+License File: vendor/paragonie/constant_time_encoding/LICENSE.txt
+Copyright: Copyright (c) 2016 - 2022 Paragon Initiative Enterprises
+Source: https://github.com/paragonie/constant_time_encoding.git
+Link: https://github.com/paragonie/constant_time_encoding.git
+-----------
+paragonie/random_compat
+License: MIT
+License File: vendor/paragonie/random_compat/LICENSE
+Copyright: Copyright (c) 2015 Paragon Initiative Enterprises
+Source: https://github.com/paragonie/random_compat.git
+Link: https://github.com/paragonie/random_compat.git
+-----------
+phenx/php-font-lib
+License: LGPL-2.1-or-later
+License File: vendor/phenx/php-font-lib/LICENSE
+Copyright: Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+Source: https://github.com/dompdf/php-font-lib.git
+Link: https://github.com/PhenX/php-font-lib
+-----------
+phenx/php-svg-lib
+License: LGPL-3.0-or-later
+License File: vendor/phenx/php-svg-lib/LICENSE
+Copyright: Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+Source: https://github.com/dompdf/php-svg-lib.git
+Link: https://github.com/PhenX/php-svg-lib
+-----------
+phpoption/phpoption
+License: Apache-2.0
+License File: vendor/phpoption/phpoption/LICENSE
+Source: https://github.com/schmittjoh/php-option.git
+Link: https://github.com/schmittjoh/php-option.git
+-----------
+phpseclib/phpseclib
+License: MIT
+License File: vendor/phpseclib/phpseclib/LICENSE
+Copyright: Copyright (c) 2011-2019 TerraFrost and other contributors
+Source: https://github.com/phpseclib/phpseclib.git
+Link: http://phpseclib.sourceforge.net
+-----------
+pragmarx/google2fa
+License: MIT
+License File: vendor/pragmarx/google2fa/LICENSE.md
+Copyright: Copyright 2014-2018 Phil, Antonio Carlos Ribeiro and All Contributors
+Source: https://github.com/antonioribeiro/google2fa.git
+Link: https://github.com/antonioribeiro/google2fa.git
+-----------
+predis/predis
+License: MIT
+License File: vendor/predis/predis/LICENSE
+Copyright: Copyright (c) 2009-2020 Daniele Alessandri (original work)
+Copyright (c) 2021-2023 Till Krüss (modified work)
+Source: https://github.com/predis/predis.git
+Link: http://github.com/predis/predis
+-----------
+psr/cache
+License: MIT
+License File: vendor/psr/cache/LICENSE.txt
+Copyright: Copyright (c) 2015 PHP Framework Interoperability Group
+Source: https://github.com/php-fig/cache.git
+Link: https://github.com/php-fig/cache.git
+-----------
+psr/clock
+License: MIT
+License File: vendor/psr/clock/LICENSE
+Copyright: Copyright (c) 2017 PHP Framework Interoperability Group
+Source: https://github.com/php-fig/clock.git
+Link: https://github.com/php-fig/clock
+-----------
+psr/container
+License: MIT
+License File: vendor/psr/container/LICENSE
+Copyright: Copyright (c) 2013-2016 container-interop
+Copyright (c) 2016 PHP Framework Interoperability Group
+Source: https://github.com/php-fig/container.git
+Link: https://github.com/php-fig/container
+-----------
+psr/event-dispatcher
+License: MIT
+License File: vendor/psr/event-dispatcher/LICENSE
+Copyright: Copyright (c) 2018 PHP-FIG
+Source: https://github.com/php-fig/event-dispatcher.git
+Link: https://github.com/php-fig/event-dispatcher.git
+-----------
+psr/http-client
+License: MIT
+License File: vendor/psr/http-client/LICENSE
+Copyright: Copyright (c) 2017 PHP Framework Interoperability Group
+Source: https://github.com/php-fig/http-client.git
+Link: https://github.com/php-fig/http-client
+-----------
+psr/http-factory
+License: MIT
+License File: vendor/psr/http-factory/LICENSE
+Copyright: Copyright (c) 2018 PHP-FIG
+Source: https://github.com/php-fig/http-factory.git
+Link: https://github.com/php-fig/http-factory.git
+-----------
+psr/http-message
+License: MIT
+License File: vendor/psr/http-message/LICENSE
+Copyright: Copyright (c) 2014 PHP Framework Interoperability Group
+Source: https://github.com/php-fig/http-message.git
+Link: https://github.com/php-fig/http-message
+-----------
+psr/log
+License: MIT
+License File: vendor/psr/log/LICENSE
+Copyright: Copyright (c) 2012 PHP Framework Interoperability Group
+Source: https://github.com/php-fig/log.git
+Link: https://github.com/php-fig/log
+-----------
+psr/simple-cache
+License: MIT
+License File: vendor/psr/simple-cache/LICENSE.md
+Copyright: Copyright (c) 2016 PHP Framework Interoperability Group
+Source: https://github.com/php-fig/simple-cache.git
+Link: https://github.com/php-fig/simple-cache.git
+-----------
+psy/psysh
+License: MIT
+License File: vendor/psy/psysh/LICENSE
+Copyright: Copyright (c) 2012-2023 Justin Hileman
+Source: https://github.com/bobthecow/psysh.git
+Link: http://psysh.org
+-----------
+ralouphie/getallheaders
+License: MIT
+License File: vendor/ralouphie/getallheaders/LICENSE
+Copyright: Copyright (c) 2014 Ralph Khattar
+Source: https://github.com/ralouphie/getallheaders.git
+Link: https://github.com/ralouphie/getallheaders.git
+-----------
+ramsey/collection
+License: MIT
+License File: vendor/ramsey/collection/LICENSE
+Copyright: Copyright (c) 2015-2022 Ben Ramsey <***@*********.***>
+Source: https://github.com/ramsey/collection.git
+Link: https://github.com/ramsey/collection.git
+-----------
+ramsey/uuid
+License: MIT
+License File: vendor/ramsey/uuid/LICENSE
+Copyright: Copyright (c) 2012-2023 Ben Ramsey <***@*********.***>
+Source: https://github.com/ramsey/uuid.git
+Link: https://github.com/ramsey/uuid.git
+-----------
+robrichards/xmlseclibs
+License: BSD-3-Clause
+License File: vendor/robrichards/xmlseclibs/LICENSE
+Copyright: Copyright (c) 2007-2019, Robert Richards <*********@*********.***>.
+Source: https://github.com/robrichards/xmlseclibs.git
+Link: https://github.com/robrichards/xmlseclibs
+-----------
+sabberworm/php-css-parser
+License: MIT
+License File: vendor/sabberworm/php-css-parser/LICENSE
+Copyright: Copyright (c) 2011 Raphael Schweikert, https://www.sabberworm.com/
+Source: https://github.com/MyIntervals/PHP-CSS-Parser.git
+Link: https://www.sabberworm.com/blog/2010/6/10/php-css-parser
+-----------
+socialiteproviders/discord
+License: MIT
+Source: https://github.com/SocialiteProviders/Discord.git
+Link: https://github.com/SocialiteProviders/Discord.git
+-----------
+socialiteproviders/gitlab
+License: MIT
+Source: https://github.com/SocialiteProviders/GitLab.git
+Link: https://github.com/SocialiteProviders/GitLab.git
+-----------
+socialiteproviders/manager
+License: MIT
+License File: vendor/socialiteproviders/manager/LICENSE
+Copyright: Copyright (c) 2015 Andy Wendt
+Source: https://github.com/SocialiteProviders/Manager.git
+Link: https://socialiteproviders.com
+-----------
+socialiteproviders/microsoft-azure
+License: MIT
+Source: https://github.com/SocialiteProviders/Microsoft-Azure.git
+Link: https://github.com/SocialiteProviders/Microsoft-Azure.git
+-----------
+socialiteproviders/okta
+License: MIT
+Source: https://github.com/SocialiteProviders/Okta.git
+Link: https://github.com/SocialiteProviders/Okta.git
+-----------
+socialiteproviders/twitch
+License: MIT
+Source: https://github.com/SocialiteProviders/Twitch.git
+Link: https://github.com/SocialiteProviders/Twitch.git
+-----------
+ssddanbrown/htmldiff
+License: MIT
+License File: vendor/ssddanbrown/htmldiff/license.md
+Copyright: Copyright (c) 2020 Nathan Herald, Rohland de Charmoy, Dan Brown
+Source: https://github.com/ssddanbrown/HtmlDiff.git
+Link: https://github.com/ssddanbrown/htmldiff
+-----------
+ssddanbrown/symfony-mailer
+License: MIT
+License File: vendor/ssddanbrown/symfony-mailer/LICENSE
+Copyright: Copyright (c) 2019-present Fabien Potencier
+Source: https://github.com/ssddanbrown/symfony-mailer.git
+Link: https://symfony.com
+-----------
+symfony/console
+License: MIT
+License File: vendor/symfony/console/LICENSE
+Copyright: Copyright (c) 2004-present Fabien Potencier
+Source: https://github.com/symfony/console.git
+Link: https://symfony.com
+-----------
+symfony/css-selector
+License: MIT
+License File: vendor/symfony/css-selector/LICENSE
+Copyright: Copyright (c) 2004-present Fabien Potencier
+Source: https://github.com/symfony/css-selector.git
+Link: https://symfony.com
+-----------
+symfony/deprecation-contracts
+License: MIT
+License File: vendor/symfony/deprecation-contracts/LICENSE
+Copyright: Copyright (c) 2020-present Fabien Potencier
+Source: https://github.com/symfony/deprecation-contracts.git
+Link: https://symfony.com
+-----------
+symfony/error-handler
+License: MIT
+License File: vendor/symfony/error-handler/LICENSE
+Copyright: Copyright (c) 2019-present Fabien Potencier
+Source: https://github.com/symfony/error-handler.git
+Link: https://symfony.com
+-----------
+symfony/event-dispatcher
+License: MIT
+License File: vendor/symfony/event-dispatcher/LICENSE
+Copyright: Copyright (c) 2004-present Fabien Potencier
+Source: https://github.com/symfony/event-dispatcher.git
+Link: https://symfony.com
+-----------
+symfony/event-dispatcher-contracts
+License: MIT
+License File: vendor/symfony/event-dispatcher-contracts/LICENSE
+Copyright: Copyright (c) 2018-present Fabien Potencier
+Source: https://github.com/symfony/event-dispatcher-contracts.git
+Link: https://symfony.com
+-----------
+symfony/finder
+License: MIT
+License File: vendor/symfony/finder/LICENSE
+Copyright: Copyright (c) 2004-present Fabien Potencier
+Source: https://github.com/symfony/finder.git
+Link: https://symfony.com
+-----------
+symfony/http-foundation
+License: MIT
+License File: vendor/symfony/http-foundation/LICENSE
+Copyright: Copyright (c) 2004-present Fabien Potencier
+Source: https://github.com/symfony/http-foundation.git
+Link: https://symfony.com
+-----------
+symfony/http-kernel
+License: MIT
+License File: vendor/symfony/http-kernel/LICENSE
+Copyright: Copyright (c) 2004-present Fabien Potencier
+Source: https://github.com/symfony/http-kernel.git
+Link: https://symfony.com
+-----------
+symfony/mime
+License: MIT
+License File: vendor/symfony/mime/LICENSE
+Copyright: Copyright (c) 2010-present Fabien Potencier
+Source: https://github.com/symfony/mime.git
+Link: https://symfony.com
+-----------
+symfony/polyfill-ctype
+License: MIT
+License File: vendor/symfony/polyfill-ctype/LICENSE
+Copyright: Copyright (c) 2018-present Fabien Potencier
+Source: https://github.com/symfony/polyfill-ctype.git
+Link: https://symfony.com
+-----------
+symfony/polyfill-intl-grapheme
+License: MIT
+License File: vendor/symfony/polyfill-intl-grapheme/LICENSE
+Copyright: Copyright (c) 2015-present Fabien Potencier
+Source: https://github.com/symfony/polyfill-intl-grapheme.git
+Link: https://symfony.com
+-----------
+symfony/polyfill-intl-idn
+License: MIT
+License File: vendor/symfony/polyfill-intl-idn/LICENSE
+Copyright: Copyright (c) 2018-present Fabien Potencier and Trevor Rowbotham <******.*********@**.**>
+Source: https://github.com/symfony/polyfill-intl-idn.git
+Link: https://symfony.com
+-----------
+symfony/polyfill-intl-normalizer
+License: MIT
+License File: vendor/symfony/polyfill-intl-normalizer/LICENSE
+Copyright: Copyright (c) 2015-present Fabien Potencier
+Source: https://github.com/symfony/polyfill-intl-normalizer.git
+Link: https://symfony.com
+-----------
+symfony/polyfill-mbstring
+License: MIT
+License File: vendor/symfony/polyfill-mbstring/LICENSE
+Copyright: Copyright (c) 2015-present Fabien Potencier
+Source: https://github.com/symfony/polyfill-mbstring.git
+Link: https://symfony.com
+-----------
+symfony/polyfill-php72
+License: MIT
+License File: vendor/symfony/polyfill-php72/LICENSE
+Copyright: Copyright (c) 2015-present Fabien Potencier
+Source: https://github.com/symfony/polyfill-php72.git
+Link: https://symfony.com
+-----------
+symfony/polyfill-php80
+License: MIT
+License File: vendor/symfony/polyfill-php80/LICENSE
+Copyright: Copyright (c) 2020-present Fabien Potencier
+Source: https://github.com/symfony/polyfill-php80.git
+Link: https://symfony.com
+-----------
+symfony/polyfill-php83
+License: MIT
+License File: vendor/symfony/polyfill-php83/LICENSE
+Copyright: Copyright (c) 2022-present Fabien Potencier
+Source: https://github.com/symfony/polyfill-php83.git
+Link: https://symfony.com
+-----------
+symfony/polyfill-uuid
+License: MIT
+License File: vendor/symfony/polyfill-uuid/LICENSE
+Copyright: Copyright (c) 2018-present Fabien Potencier
+Source: https://github.com/symfony/polyfill-uuid.git
+Link: https://symfony.com
+-----------
+symfony/process
+License: MIT
+License File: vendor/symfony/process/LICENSE
+Copyright: Copyright (c) 2004-present Fabien Potencier
+Source: https://github.com/symfony/process.git
+Link: https://symfony.com
+-----------
+symfony/routing
+License: MIT
+License File: vendor/symfony/routing/LICENSE
+Copyright: Copyright (c) 2004-present Fabien Potencier
+Source: https://github.com/symfony/routing.git
+Link: https://symfony.com
+-----------
+symfony/service-contracts
+License: MIT
+License File: vendor/symfony/service-contracts/LICENSE
+Copyright: Copyright (c) 2018-present Fabien Potencier
+Source: https://github.com/symfony/service-contracts.git
+Link: https://symfony.com
+-----------
+symfony/string
+License: MIT
+License File: vendor/symfony/string/LICENSE
+Copyright: Copyright (c) 2019-present Fabien Potencier
+Source: https://github.com/symfony/string.git
+Link: https://symfony.com
+-----------
+symfony/translation
+License: MIT
+License File: vendor/symfony/translation/LICENSE
+Copyright: Copyright (c) 2004-present Fabien Potencier
+Source: https://github.com/symfony/translation.git
+Link: https://symfony.com
+-----------
+symfony/translation-contracts
+License: MIT
+License File: vendor/symfony/translation-contracts/LICENSE
+Copyright: Copyright (c) 2018-present Fabien Potencier
+Source: https://github.com/symfony/translation-contracts.git
+Link: https://symfony.com
+-----------
+symfony/uid
+License: MIT
+License File: vendor/symfony/uid/LICENSE
+Copyright: Copyright (c) 2020-present Fabien Potencier
+Source: https://github.com/symfony/uid.git
+Link: https://symfony.com
+-----------
+symfony/var-dumper
+License: MIT
+License File: vendor/symfony/var-dumper/LICENSE
+Copyright: Copyright (c) 2014-present Fabien Potencier
+Source: https://github.com/symfony/var-dumper.git
+Link: https://symfony.com
+-----------
+tijsverkoyen/css-to-inline-styles
+License: BSD-3-Clause
+License File: vendor/tijsverkoyen/css-to-inline-styles/LICENSE.md
+Copyright: Copyright (c) Tijs Verkoyen. All rights reserved.
+Source: https://github.com/tijsverkoyen/CssToInlineStyles.git
+Link: https://github.com/tijsverkoyen/CssToInlineStyles
+-----------
+vlucas/phpdotenv
+License: BSD-3-Clause
+License File: vendor/vlucas/phpdotenv/LICENSE
+Copyright: Copyright (c) 2014, Graham Campbell.
+Source: https://github.com/vlucas/phpdotenv.git
+Link: https://github.com/vlucas/phpdotenv.git
+-----------
+voku/portable-ascii
+License: MIT
+License File: vendor/voku/portable-ascii/LICENSE.txt
+Copyright: Copyright (C) 2019 Lars Moelleken
+Source: https://github.com/voku/portable-ascii.git
+Link: https://github.com/voku/portable-ascii
+-----------
+webmozart/assert
+License: MIT
+License File: vendor/webmozart/assert/LICENSE
+Copyright: Copyright (c) 2014 Bernhard Schussek
+Source: https://github.com/webmozarts/assert.git
+Link: https://github.com/webmozarts/assert.git
index 7b7f5d2a2e30ba51f10a66aad3b948bc30888794..f4c84092c6f71a8a580721269fdaa1899abe864d 100644 (file)
@@ -276,6 +276,14 @@ return [
     'webhooks_last_errored' => 'Last Errored:',
     'webhooks_last_error_message' => 'Last Error Message:',
 
+    // Licensing
+    'licenses' => 'Licenses',
+    'licenses_desc' => 'This page details license information for BookStack in addition to the projects & libraries that are used within BookStack. Many projects listed may only be used in a development context.',
+    'licenses_bookstack' => 'BookStack License',
+    'licenses_php' => 'PHP Library Licenses',
+    'licenses_js' => 'JavaScript Library Licenses',
+    'licenses_other' => 'Other Licenses',
+    'license_details' => 'License Details',
 
     //! If editing translations files directly please ignore this in all
     //! languages apart from en. Content will be auto-copied from en.
index 5fec36c2f08f2f9a8e646d214da5c2ea54511460..bcf4e5aa208846989707df3c1b22af4df58a0471 100644 (file)
@@ -9,7 +9,7 @@ parameters:
     # The level 8 is the highest level
     level: 1
 
-    phpVersion: 80002
+    phpVersion: 80200
 
     bootstrapFiles:
       - bootstrap/phpstan.php
@@ -19,5 +19,6 @@ parameters:
 
     excludePaths:
         - ./Config/**/*.php
+        - ./dev/**/*.php
 
     checkMissingIterableValueType: false
\ No newline at end of file
index 183e456378caeb73a8d13b6c3159d0f422b39401..a9e97f0c78a56cc33902eebf0d56972bbaeb7635 100644 (file)
@@ -1,13 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.3/phpunit.xsd"
-         bootstrap="vendor/autoload.php"
-         colors="true">
-  <coverage>
-    <include>
-      <directory suffix=".php">app/</directory>
-    </include>
-  </coverage>
+<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/10.5/phpunit.xsd" bootstrap="vendor/autoload.php" colors="true">
   <testsuites>
     <testsuite name="Application Test Suite">
       <directory>./tests/</directory>
@@ -62,4 +54,9 @@
     <server name="APP_DEFAULT_DARK_MODE" value="false"/>
     <server name="IP_ADDRESS_PRECISION" value="4"/>
   </php>
+  <source>
+    <include>
+      <directory suffix=".php">app/</directory>
+    </include>
+  </source>
 </phpunit>
index a32e229313837028be70503754a0945030aaa17e..17e1a05f6593eb1e43042fcce36859fe61bf4b22 100644 (file)
--- a/readme.md
+++ b/readme.md
@@ -7,10 +7,10 @@
 [![Lint Status](https://github.com/BookStackApp/BookStack/workflows/lint-php/badge.svg)](https://github.com/BookStackApp/BookStack/actions)
 [![Maintainability](https://api.codeclimate.com/v1/badges/5551731994dd22fa1f4f/maintainability)](https://codeclimate.com/github/BookStackApp/BookStack/maintainability)
 
+[![Alternate Source](https://img.shields.io/static/v1?label=Alt+Source&message=Git&color=ef391a&logo=git)](https://source.bookstackapp.com/)
 [![Repo Stats](https://img.shields.io/static/v1?label=GitHub+project&message=stats&color=f27e3f)](https://gh-stats.bookstackapp.com/)
 [![Discord](https://img.shields.io/static/v1?label=Discord&message=chat&color=738adb&logo=discord)](https://discord.gg/ztkBqR2)
 [![Mastodon](https://img.shields.io/static/v1?label=Mastodon&message=@bookstack&color=595aff&logo=mastodon)](https://fosstodon.org/@bookstack)
-[![X - Formerly Twitter](https://img.shields.io/static/v1?label=Follow&message=@bookstack_app&color=1d9bf0&logo=x)](https://x.com/bookstack_app)
 
 [![PeerTube](https://img.shields.io/static/v1?label=PeerTube&[email protected]&color=f2690d&logo=peertube)](https://foss.video/c/bookstack)
 [![YouTube](https://img.shields.io/static/v1?label=YouTube&message=bookstackapp&color=ff0000&logo=youtube)](https://www.youtube.com/bookstackapp)
@@ -29,12 +29,14 @@ A platform for storing and organising information and documentation. Details for
 
 ## 📚 Project Definition
 
-BookStack is an opinionated wiki system that provides a pleasant and simple out-of-the-box experience. New users to an instance should find the experience intuitive and only basic word-processing skills should be required to get involved in creating content on BookStack. The platform should provide advanced power features to those that desire it but they should not interfere with the core simple user experience.
+BookStack is an opinionated documentation platform that provides a pleasant and simple out-of-the-box experience. New users to an instance should find the experience intuitive and only basic word-processing skills should be required to get involved in creating content on BookStack. The platform should provide advanced power features to those that desire it but they should not interfere with the core simple user experience.
 
 BookStack is not designed as an extensible platform to be used for purposes that differ to the statement above.
 
 In regard to development philosophy, BookStack has a relaxed, open & positive approach. At the end of the day this is free software developed and maintained by people donating their own free time.
 
+You can read more about the project and its origins in [our FAQ here](https://www.bookstackapp.com/about/project-faq/).
+
 ## 🌟 Project Sponsors
 
 Shown below are our bronze, silver and gold project sponsors.
@@ -43,14 +45,6 @@ Big thanks to these companies for supporting the project.
 
 [Project donation details](https://www.bookstackapp.com/donate/) - [GitHub Sponsors Page](https://github.com/sponsors/ssddanbrown) - [Ko-fi Page](https://ko-fi.com/ssddanbrown)
 
-#### Gold Sponsor
-
-<table><tbody><tr>
-<td align="center"><a href="https://www.federated.computer/bookstack/" target="_blank">
-    <img width="240" src="https://media.githubusercontent.com/media/BookStackApp/website/main/static/images/sponsors/federated-computer.png" alt="Diagrams.net">
-</a></td>
-</tr></tbody></table>
-
 #### Bronze Sponsors
 
 <table><tbody><tr>
@@ -164,3 +158,5 @@ Note: This is not an exhaustive list of all libraries and projects that would be
 * [PHPStan](https://phpstan.org/) & [Larastan](https://github.com/nunomaduro/larastan) - _[MIT](https://github.com/phpstan/phpstan/blob/master/LICENSE) and [MIT](https://github.com/nunomaduro/larastan/blob/master/LICENSE.md)_
 * [PHP_CodeSniffer](https://github.com/squizlabs/PHP_CodeSniffer) - _[BSD 3-Clause](https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt)_
 * [JakeArchibald/IDB-Keyval](https://github.com/jakearchibald/idb-keyval) - _[Apache-2.0](https://github.com/jakearchibald/idb-keyval/blob/main/LICENCE)_
+
+For a detailed breakdown of the JavaScript & PHP projects imported & used via NPM & composer package managers, along with their licenses, please see the [dev/licensing/js-library-licenses.txt](dev/licensing/js-library-licenses.txt) and [dev/licensing/php-library-licenses.txt](dev/licensing/php-library-licenses.txt) files. 
\ No newline at end of file
diff --git a/resources/views/help/licenses.blade.php b/resources/views/help/licenses.blade.php
new file mode 100644 (file)
index 0000000..1eb2935
--- /dev/null
@@ -0,0 +1,61 @@
+@extends('layouts.simple')
+
+@section('body')
+
+    <div class="container small">
+
+        <div class="my-l">&nbsp;</div>
+
+        <div class="card content-wrap auto-height">
+
+            <h1 class="list-heading">{{ trans('settings.licenses') }}</h1>
+            <p>{{ trans('settings.licenses_desc') }}</p>
+
+            <ul>
+                <li><a href="#bookstack-license">{{ trans('settings.licenses_bookstack') }}</a></li>
+                <li><a href="#php-lib-licenses">{{ trans('settings.licenses_php') }}</a></li>
+                <li><a href="#js-lib-licenses">{{ trans('settings.licenses_js') }}</a></li>
+                <li><a href="#other-licenses">{{ trans('settings.licenses_other') }}</a></li>
+            </ul>
+        </div>
+
+        <div id="bookstack-license" class="card content-wrap auto-height">
+            <h3 class="list-heading">{{ trans('settings.licenses_bookstack') }}</h3>
+            <div style="white-space: pre-wrap;" class="mb-m">{{ $license }}</div>
+            <p>BookStack® is a UK registered trade mark of Daniel Brown. </p>
+        </div>
+
+        <div id="php-lib-licenses" class="card content-wrap auto-height">
+            <h3 class="list-heading">{{ trans('settings.licenses_php') }}</h3>
+            <div style="white-space: pre-wrap;">{{ $phpLibData }}</div>
+        </div>
+
+        <div id="js-lib-licenses" class="card content-wrap auto-height">
+            <h3 class="list-heading">{{ trans('settings.licenses_js') }}</h3>
+            <div style="white-space: pre-wrap;">{{ $jsLibData }}</div>
+        </div>
+
+        <div id="other-licenses" class="card content-wrap auto-height">
+            <h3 class="list-heading">{{ trans('settings.licenses_other') }}</h3>
+            <div style="white-space: pre-line;">BookStack makes heavy use of PHP:
+                License: PHP License, version 3.01
+                License File: https://www.php.net/license/3_01.txt
+                Copyright: Copyright (c) 1999 - 2019 The PHP Group. All rights reserved.
+                Link: https://www.php.net/
+                -----------
+                BookStack uses Icons from Google Material Icons:
+                License: Apache License Version 2.0
+                License File: https://github.com/google/material-design-icons/blob/master/LICENSE
+                Copyright: Copyright 2020 Google LLC
+                Link: https://github.com/google/material-design-icons
+                -----------
+                BookStack is distributed with TinyMCE:
+                License: MIT
+                License File: https://github.com/tinymce/tinymce/blob/release/6.7/LICENSE.TXT
+                Copyright: Copyright (c) 2022 Ephox Corporation DBA Tiny Technologies, Inc.
+                Link: https://github.com/tinymce/tinymce
+            </div>
+        </div>
+    </div>
+
+@endsection
\ No newline at end of file
index 94a8f7725d9ae1acb7c56c06251401877b996052..a59b58d535c431a0bac129a811b6b1683bb4ece4 100644 (file)
                 <h5 class="mt-xl">{{ trans('settings.system_version') }}</h5>
                 <div class="py-xs">
                     <a target="_blank" rel="noopener noreferrer" href="https://github.com/BookStackApp/BookStack/releases">
-                        BookStack @if(strpos($version, 'v') !== 0) version @endif {{ $version }}
+                        BookStack @if(!str_starts_with($version, 'v')) version @endif {{ $version }}
                     </a>
+                    <br>
+                    <a target="_blank" href="{{ url('/licenses') }}" class="text-muted">{{ trans('settings.license_details') }}</a>
                 </div>
             </div>
 
index 4620cd08bc370deeafa5a3546deead32b9a53972..03595288f92952ef873f89b329aca170bc6dd665 100644 (file)
@@ -5,6 +5,7 @@ use BookStack\Activity\Controllers as ActivityControllers;
 use BookStack\Api\ApiDocsController;
 use BookStack\Api\UserApiTokenController;
 use BookStack\App\HomeController;
+use BookStack\App\MetaController;
 use BookStack\Entities\Controllers as EntityControllers;
 use BookStack\Http\Middleware\VerifyCsrfToken;
 use BookStack\Permissions\PermissionsController;
@@ -18,9 +19,10 @@ use Illuminate\Support\Facades\Route;
 use Illuminate\View\Middleware\ShareErrorsFromSession;
 
 Route::get('/status', [SettingControllers\StatusController::class, 'show']);
-Route::get('/robots.txt', [HomeController::class, 'robots']);
-Route::get('/favicon.ico', [HomeController::class, 'favicon']);
-Route::get('/manifest.json', [HomeController::class, 'pwaManifest']);
+Route::get('/robots.txt', [MetaController::class, 'robots']);
+Route::get('/favicon.ico', [MetaController::class, 'favicon']);
+Route::get('/manifest.json', [MetaController::class, 'pwaManifest']);
+Route::get('/licenses', [MetaController::class, 'licenses']);
 
 // Authenticated routes...
 Route::middleware('auth')->group(function () {
@@ -350,4 +352,4 @@ Route::post('/password/reset', [AccessControllers\ResetPasswordController::class
 // Metadata routes
 Route::view('/help/wysiwyg', 'help.wysiwyg');
 
-Route::fallback([HomeController::class, 'notFound'])->name('fallback');
+Route::fallback([MetaController::class, 'notFound'])->name('fallback');
index 345d1dc780b8a1e218b8c57a83340bc97cb7b9ca..228c75e9eade8f29e5daf3adfa08e1d725f23c78 100644 (file)
@@ -594,10 +594,16 @@ class OidcTest extends TestCase
     {
         config()->set(['oidc.end_session_endpoint' => 'https://example.com/logout']);
 
-        $this->runLogin();
+        // Fix times so our token is predictable
+        $claimOverrides = [
+            'iat' => time(),
+            'exp' => time() + 720,
+            'auth_time' => time()
+        ];
+        $this->runLogin($claimOverrides);
 
         $resp = $this->asEditor()->post('/oidc/logout');
-        $query = 'id_token_hint=' . urlencode(OidcJwtHelper::idToken()) .  '&post_logout_redirect_uri=' . urlencode(url('/'));
+        $query = 'id_token_hint=' . urlencode(OidcJwtHelper::idToken($claimOverrides)) .  '&post_logout_redirect_uri=' . urlencode(url('/'));
         $resp->assertRedirect('https://example.com/logout?' . $query);
     }
 
index e60ac5643ac6e9a8d403c5839f011c797f8cb93c..d2af17b9cfb9318237966872f2c93d1f4a465ba9 100644 (file)
@@ -95,7 +95,7 @@ class ResetPasswordTest extends TestCase
         $resp = $this->followingRedirects()->post('/password/email', [
             'email' => $editor->email,
         ]);
-        Notification::assertTimesSent(1, ResetPasswordNotification::class);
+        Notification::assertSentTimes(ResetPasswordNotification::class, 1);
         $resp->assertSee('A password reset link will be sent to ' . $editor->email . ' if that email address is found in the system.');
     }
 }
index b1cefbb6584375b519bcc230f434464f1ca87b4a..3258d05bc927e05ef05d7440ff1da5075aa3e3d6 100644 (file)
@@ -3,15 +3,14 @@
 namespace Tests;
 
 use Illuminate\Contracts\Console\Kernel;
+use Illuminate\Foundation\Application;
 
 trait CreatesApplication
 {
     /**
      * Creates the application.
-     *
-     * @return \Illuminate\Foundation\Application
      */
-    public function createApplication()
+    public function createApplication(): Application
     {
         $app = require __DIR__ . '/../bootstrap/app.php';
         $app->make(Kernel::class)->bootstrap();
diff --git a/tests/LicensesTest.php b/tests/LicensesTest.php
new file mode 100644 (file)
index 0000000..a7fb803
--- /dev/null
@@ -0,0 +1,24 @@
+<?php
+
+namespace Tests;
+
+class LicensesTest extends TestCase
+{
+    public function test_licenses_endpoint()
+    {
+        $resp = $this->get('/licenses');
+        $resp->assertOk();
+        $resp->assertSee('Licenses');
+        $resp->assertSee('PHP Library Licenses');
+        $resp->assertSee('Dan Brown and the BookStack Project contributors');
+        $resp->assertSee('doctrine/dbal');
+        $resp->assertSee('@codemirror/lang-html');
+    }
+
+    public function test_licenses_linked_to_from_settings()
+    {
+        $resp = $this->asAdmin()->get('/settings/features');
+        $html = $this->withHtml($resp);
+        $html->assertLinkExists(url('/licenses'), 'License Details');
+    }
+}
index 2de32c1b8c87b9383c2712a4297512e3bd78c349..aedcb75aa19488ad83a59c82b85420199c0460ae 100644 (file)
@@ -132,7 +132,7 @@ class ConfigTest extends TestCase
     public function test_smtp_scheme_and_certain_port_forces_tls_usage()
     {
         $isMailTlsRequired = function () {
-            /** @var \BookStack\App\Mail\EsmtpTransport $transport */
+            /** @var EsmtpTransport $transport */
             $transport = Mail::mailer('smtp')->getSymfonyTransport();
             Mail::purge('smtp');
             return $transport->getTlsRequirement();
diff --git a/version b/version
index 05edb56ccca7fce34f35c787ea6bc1145b1ae26d..522220af0c378bdfece6878837084f92c5bbe901 100644 (file)
--- a/version
+++ b/version
@@ -1 +1 @@
-v23.09-dev
+v24.03-dev