From d4416f5b9335887541e78dd45fc8a3fc24d5e5a1 Mon Sep 17 00:00:00 2001 From: sinach Date: Wed, 31 Jul 2024 16:09:33 +0100 Subject: [PATCH 1/5] feat: et all users in an organisation endpoint --- .../Controllers/Api/V1/RoleController.php | 159 ++++++++++++++++-- routes/api.php | 4 +- tests/Feature/GetAllRolesTest.php | 100 +++++++++++ tests/Feature/ShowRoleTest.php | 128 ++++++++++++++ 4 files changed, 376 insertions(+), 15 deletions(-) create mode 100644 tests/Feature/GetAllRolesTest.php create mode 100644 tests/Feature/ShowRoleTest.php diff --git a/app/Http/Controllers/Api/V1/RoleController.php b/app/Http/Controllers/Api/V1/RoleController.php index ebb9ac3f..2fec5a47 100755 --- a/app/Http/Controllers/Api/V1/RoleController.php +++ b/app/Http/Controllers/Api/V1/RoleController.php @@ -20,34 +20,65 @@ class RoleController extends Controller /** * Store a newly created resource in storage. */ - public function store(StoreRoleRequest $request) + public function store(StoreRoleRequest $request, $org_id) { try { DB::beginTransaction(); - // creating the role + // Validate the organisation ID + if (!is_numeric($org_id)) { + return response()->json([ + 'status_code' => Response::HTTP_BAD_REQUEST, + 'error' => 'Invalid input', + 'message' => 'Invalid organisation ID format', + ], Response::HTTP_BAD_REQUEST); + } + + // Check whether the organisation exists + $organisation = Organisation::find($org_id); + if (!$organisation) { + return response()->json([ + 'status_code' => Response::HTTP_NOT_FOUND, + 'error' => 'Organisation not found', + 'message' => 'The organisation with ID ' . $org_id . ' does not exist', + ], Response::HTTP_NOT_FOUND); + } + + // Check for duplicate role name within the organisation + $existingRole = Role::where('org_id', $org_id)->where('name', $request->name)->first(); + if ($existingRole) { + return response()->json([ + 'status_code' => Response::HTTP_CONFLICT, + 'error' => 'Conflict', + 'message' => 'A role with this name already exists in the organisation', + ], Response::HTTP_CONFLICT); + } + + // Creating the role $role = Role::create([ - 'name' => $request->role_name, - 'org_id' => $request->organisation_id, + 'name' => $request->name, + 'description' => $request->description, + 'org_id' => $org_id, ]); - $role->permissions()->attach($request->permissions_id); DB::commit(); - $code = Response::HTTP_CREATED; - return response()->json([ + 'id' => $role->id, + 'name' => $role->name, + 'description' => $role->description, 'message' => "Role created successfully", - 'status_code' => $code, - ], $code); + 'status_code' => Response::HTTP_CREATED, + ], Response::HTTP_CREATED); } catch (\Exception $e) { DB::rollBack(); Log::error('Role creation error: ' . $e->getMessage()); - $code = Response::HTTP_BAD_REQUEST; + return response()->json([ - 'message' => "Role creation failed - " . $e->getMessage(), - 'status_code' => $code, - ], $code); + 'status_code' => Response::HTTP_BAD_REQUEST, + 'error' => 'Invalid input', + 'message' => 'Role creation failed - ' . $e->getMessage(), + ], Response::HTTP_BAD_REQUEST); } } @@ -121,4 +152,106 @@ public function update(UpdateRoleRequest $request, $org_id, $role_id) } else return ResponseHelper::response("Role not found", 404, null); } else return ResponseHelper::response("Organisation not found", 404, null); } + + // To get all roles + public function index($org_id) + { + try { + // Validate the organisation ID + if (!is_numeric($org_id)) { + return response()->json([ + 'status_code' => Response::HTTP_BAD_REQUEST, + 'error' => 'Bad Request', + 'message' => 'Invalid organisation ID format', + ], Response::HTTP_BAD_REQUEST); + } + + // Check whether organisation exists + $organisation = Organisation::find($org_id); + if (!$organisation) { + return response()->json([ + 'status_code' => Response::HTTP_NOT_FOUND, + 'error' => 'Not Found', + 'message' => 'The organisation with ID ' . $org_id . ' does not exist', + ], Response::HTTP_NOT_FOUND); + } + + // Fetch all roles within the organisation + $roles = Role::where('org_id', $org_id)->get(['id', 'name', 'description']); + + return response()->json([ + 'status_code' => Response::HTTP_OK, + 'data' => $roles, + ], Response::HTTP_OK); + } catch (\Exception $e) { + return response()->json([ + 'status_code' => Response::HTTP_INTERNAL_SERVER_ERROR, + 'error' => 'Internal Server Error', + 'message' => 'An error occurred while fetching roles', + ], Response::HTTP_INTERNAL_SERVER_ERROR); + } + } + + // Get a role by id + public function show($org_id, $role_id) + { + try { + // validate organisation ID and role ID + if (!is_numeric($org_id) || !is_numeric($role_id)) { + return response()->json([ + 'status_code' => Response::HTTP_BAD_REQUEST, + 'error' => 'Bad Request', + 'message' => 'Invalid organisation ID or role ID format', + ], Response::HTTP_BAD_REQUEST); + } + + // Check whether organisation exists + $organisation = Organisation::find($org_id); + if (!$organisation) { + return response()->json([ + 'status_code' => Response::HTTP_NOT_FOUND, + 'error' => 'Not Found', + 'message' => 'The organisation with ID ' . $org_id . 'does not exist', + ], Response::HTTP_NOT_FOUND); + } + + // Check whether role exists within the organisation + $role = Role::where('org_id', $org_id)->findOrFail($role_id); + + // Fetch all permissions and format them + $permissions = $role->permissions->map(function ($permission) use ($role) { + return [ + 'id' => $permission->id, + 'category' => $permission->category, + 'permission_list' => [ + 'can_view_transactions' => $role->permissions()->where('permission_id', $permission->id)->where('name', 'can_view_transactions')->exists(), + 'can_view_refunds' => $role->permissions()->where('permission_id', $permission->id)->where('name', 'can_view_refunds')->exists(), + 'can_edit_transactions' => $role->permissions()->where('permission_id', $permission->id)->where('name', 'can_edit_transactions')->exists(), + ], + ]; + }); + + return response()->json([ + 'status_code' => Response::HTTP_OK, + 'data' => [ + 'id' => $role->id, + 'name' => $role->name, + 'description' => $role->description, + 'permissions' => $permissions, + ], + ], Response::HTTP_OK); + } catch (\Illuminate\Database\Eloquent\ModelNotFoundException $e) { + return response()->json([ + 'status_code' => Response::HTTP_NOT_FOUND, + 'error' => 'Not Found', + 'message' => 'The role with ID ' . $role_id . ' does not exist', + ], Response::HTTP_NOT_FOUND); + } catch (\Exception $e) { + return response()->json([ + 'status_code' => Response::HTTP_INTERNAL_SERVER_ERROR, + 'error' => 'Internal Server Error', + 'message' => 'An error occurred while fetching the role', + ], Response::HTTP_INTERNAL_SERVER_ERROR); + } + } } diff --git a/routes/api.php b/routes/api.php index a39019dc..741759f1 100755 --- a/routes/api.php +++ b/routes/api.php @@ -151,8 +151,8 @@ // Roles Route::put('/organisations/{org_id}/roles/{role_id}', [RoleController::class, 'update']); Route::put('/organisations/{org_id}/roles/{role_id}/disable', [RoleController::class, 'disableRole']); - - + Route::get('/organisations/{org_id}/roles', [RoleController::class, 'index']); + Route::get('/organisations/{org_id}/roles/{role_id}', [RoleController::class, 'show']); //Update Password Route::post('/password-update', [ProfileController::class, 'updatePassword']); diff --git a/tests/Feature/GetAllRolesTest.php b/tests/Feature/GetAllRolesTest.php new file mode 100644 index 00000000..ebcad6a2 --- /dev/null +++ b/tests/Feature/GetAllRolesTest.php @@ -0,0 +1,100 @@ +user = User::factory()->create(); + $this->actingAs($this->user, 'api'); // Ensure user is authenticated + } + + /** + * Test fetching all roles successfully. + * + * @return void + */ + public function testFetchRolesSuccessfully() + { + $organisation = Organisation::factory()->create(['user_id' => $this->user->id]); + $roles = Role::factory()->count(3)->create(['org_id' => $organisation->org_id]); + + $response = $this->getJson("/api/v1/organisations/{$organisation->org_id}/roles"); + + // Log response for debugging + // \Log::info('Fetch Roles Response:', ['response' => $response->json()]); + + $rolesArray = $roles->map(function ($role) { + return [ + 'id' => $role->id, + 'name' => $role->name, + 'description' => $role->description, + ]; + })->toArray(); + + $response->assertStatus(200) + ->assertJson([ + 'status_code' => 200, + 'data' => $rolesArray, + ]); + } + + /** + * Test fetching roles with invalid organisation ID format. + * + * @return void + */ + public function testFetchRolesWithInvalidOrganisationIdFormat() + { + $response = $this->getJson('/api/v1/organisations/invalid_id/roles'); + + // Log response for debugging + // \Log::info('Invalid Org ID Response:', ['response' => $response->json()]); + + $response->assertStatus(400) + ->assertJson([ + 'status_code' => 400, + 'error' => 'Bad Request', + 'message' => 'Invalid organisation ID format', + ]); + } + + /** + * Test fetching roles for non-existent organisation. + * + * @return void + */ + public function testFetchRolesForNonExistentOrganisation() + { + $nonExistentOrgId = '00000000-0000-0000-0000-000000000999'; + + // Ensure the organisation with the given ID does not exist + $this->assertDatabaseMissing('organisations', ['org_id' => $nonExistentOrgId]); + + $response = $this->getJson("/api/v1/organisations/{$nonExistentOrgId}/roles"); + + // Log response for debugging + // \Log::info('Non-Existent Org ID Response:', ['response' => $response->json()]); + + $response->assertStatus(404) + ->assertJson([ + 'status_code' => 404, + 'error' => 'Not Found', + 'message' => "The organisation with ID {$nonExistentOrgId} does not exist", + ]); + } +} diff --git a/tests/Feature/ShowRoleTest.php b/tests/Feature/ShowRoleTest.php new file mode 100644 index 00000000..413bb39a --- /dev/null +++ b/tests/Feature/ShowRoleTest.php @@ -0,0 +1,128 @@ +create(); + $role = Role::factory()->create(['org_id' => $organisation->id]); + $permissions = Permission::factory()->count(3)->create(); + + // Attach permissions to role + $role->permissions()->attach($permissions); + + $response = $this->getJson("/api/v1/organisations/{$organisation->id}/roles/{$role->id}"); + + $permissionsArray = $permissions->map(function ($permission) use ($role) { + return [ + 'id' => $permission->id, + 'category' => $permission->category, + 'permission_list' => [ + 'can_view_transactions' => $role->permissions()->where('permission_id', $permission->id)->where('name', 'can_view_transactions')->exists(), + 'can_view_refunds' => $role->permissions()->where('permission_id', $permission->id)->where('name', 'can_view_refunds')->exists(), + 'can_edit_transactions' => $role->permissions()->where('permission_id', $permission->id)->where('name', 'can_edit_transactions')->exists(), + ], + ]; + })->toArray(); + + $response->assertStatus(200) + ->assertJson([ + 'status_code' => 200, + 'data' => [ + 'id' => $role->id, + 'name' => $role->name, + 'description' => $role->description, + 'permissions' => $permissionsArray, + ], + ]); + } + + /** + * Test fetching a role with invalid organisation ID format. + * + * @return void + */ + public function testFetchRoleWithInvalidOrganisationIdFormat() + { + $response = $this->getJson('/api/v1/organisations/invalid_id/roles/1'); + + $response->assertStatus(400) + ->assertJson([ + 'status_code' => 400, + 'error' => 'Bad Request', + 'message' => 'Invalid organisation ID or role ID format', + ]); + } + + /** + * Test fetching a role with invalid role ID format. + * + * @return void + */ + public function testFetchRoleWithInvalidRoleIdFormat() + { + $organisation = Organisation::factory()->create(); + + $response = $this->getJson("/api/v1/organisations/{$organisation->id}/roles/invalid_id"); + + $response->assertStatus(400) + ->assertJson([ + 'status_code' => 400, + 'error' => 'Bad Request', + 'message' => 'Invalid organisation ID or role ID format', + ]); + } + + /** + * Test fetching a role for a non-existent organisation. + * + * @return void + */ + public function testFetchRoleForNonExistentOrganisation() + { + $response = $this->getJson('/api/v1/organisations/999/roles/1'); + + $response->assertStatus(404) + ->assertJson([ + 'status_code' => 404, + 'error' => 'Not Found', + 'message' => 'The organisation with ID 999 does not exist', + ]); + } + + /** + * Test fetching a non-existent role. + * + * @return void + */ + public function testFetchNonExistentRole() + { + $organisation = Organisation::factory()->create(); + + $response = $this->getJson("/api/v1/organisations/{$organisation->id}/roles/999"); + + $response->assertStatus(404) + ->assertJson([ + 'status_code' => 404, + 'error' => 'Not Found', + 'message' => 'The role with ID 999 does not exist', + ]); + } +} From 1dacff391f0f740fc0085cc1da183d8f6e9cf112 Mon Sep 17 00:00:00 2001 From: sinach Date: Wed, 7 Aug 2024 20:26:57 +0100 Subject: [PATCH 2/5] feat: fetch-all-roles-in-an-organisation-endpoint --- .../Controllers/Api/V1/RoleController.php | 17 +- composer.lock | 1651 ++++++++++++----- routes/api.php | 5 +- tests/Feature/PermissionTest.php | 22 - tests/Feature/RoleCreationTest.php | 46 +- tests/Feature/RoleUpdateTest.php | 18 - 6 files changed, 1233 insertions(+), 526 deletions(-) diff --git a/app/Http/Controllers/Api/V1/RoleController.php b/app/Http/Controllers/Api/V1/RoleController.php index 305744f9..e9390aab 100755 --- a/app/Http/Controllers/Api/V1/RoleController.php +++ b/app/Http/Controllers/Api/V1/RoleController.php @@ -24,13 +24,17 @@ class RoleController extends Controller /** * Store a newly created resource in storage. */ - public function store(StoreRoleRequest $request, $org_id) + public function store(StoreRoleRequest $request) { + Log::info('Incoming role creation request', $request->all()); + try { DB::beginTransaction(); - // Validate the organisation ID - if (!is_numeric($org_id)) { + $org_id = $request->organisation_id; + + // Validate the organisation ID as a UUID + if (!preg_match('/^[a-f0-9-]{36}$/', $org_id)) { return response()->json([ 'status_code' => Response::HTTP_BAD_REQUEST, 'error' => 'Invalid input', @@ -49,7 +53,7 @@ public function store(StoreRoleRequest $request, $org_id) } // Check for duplicate role name within the organisation - $existingRole = Role::where('org_id', $org_id)->where('name', $request->name)->first(); + $existingRole = Role::where('org_id', $org_id)->where('name', $request->role_name)->first(); if ($existingRole) { return response()->json([ 'status_code' => Response::HTTP_CONFLICT, @@ -60,11 +64,14 @@ public function store(StoreRoleRequest $request, $org_id) // Creating the role $role = Role::create([ - 'name' => $request->name, + 'name' => $request->role_name, 'description' => $request->description, 'org_id' => $org_id, ]); + // Attach the permission to the role + $role->permissions()->attach($request->permissions_id); + DB::commit(); return response()->json([ diff --git a/composer.lock b/composer.lock index c45e5486..ddcc748e 100755 --- a/composer.lock +++ b/composer.lock @@ -35,7 +35,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "description": "Arbitrary-precision arithmetic library", "keywords": [ "Arbitrary-precision", @@ -96,7 +98,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "KyleKatarn", @@ -104,7 +108,13 @@ } ], "description": "Types to use Carbon in Doctrine", - "keywords": ["carbon", "date", "datetime", "doctrine", "time"], + "keywords": [ + "carbon", + "date", + "datetime", + "doctrine", + "time" + ], "support": { "issues": "https://github.com/CarbonPHP/carbon-doctrine-types/issues", "source": "https://github.com/CarbonPHP/carbon-doctrine-types/tree/2.1.0" @@ -158,7 +168,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Nils Adermann", @@ -177,7 +189,12 @@ } ], "description": "Semver library that offers utilities, version constraint parsing and validation.", - "keywords": ["semantic", "semver", "validation", "versioning"], + "keywords": [ + "semantic", + "semver", + "validation", + "versioning" + ], "support": { "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/semver/issues", @@ -235,7 +252,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Dragonfly Development Inc.", @@ -260,7 +279,12 @@ ], "description": "Given a deep data structure, access data by dot notation.", "homepage": "https://github.com/dflydev/dflydev-dot-access-data", - "keywords": ["access", "data", "dot", "notation"], + "keywords": [ + "access", + "data", + "dot", + "notation" + ], "support": { "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues", "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.3" @@ -302,7 +326,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Guilherme Blanco", @@ -398,7 +424,9 @@ "suggest": { "symfony/console": "For helpful console commands such as SQL execution and import of files." }, - "bin": ["bin/doctrine-dbal"], + "bin": [ + "bin/doctrine-dbal" + ], "type": "library", "autoload": { "psr-4": { @@ -406,7 +434,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Guilherme Blanco", @@ -503,7 +533,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", "homepage": "https://www.doctrine-project.org/", "support": { @@ -545,7 +577,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Guilherme Blanco", @@ -633,7 +667,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Guilherme Blanco", @@ -721,7 +757,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Guilherme Blanco", @@ -738,7 +776,13 @@ ], "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", "homepage": "https://www.doctrine-project.org/projects/lexer.html", - "keywords": ["annotations", "docblock", "lexer", "parser", "php"], + "keywords": [ + "annotations", + "docblock", + "lexer", + "parser", + "php" + ], "support": { "issues": "https://github.com/doctrine/lexer/issues", "source": "https://github.com/doctrine/lexer/tree/3.0.1" @@ -793,7 +837,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Chris Tankersley", @@ -802,7 +848,10 @@ } ], "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", - "keywords": ["cron", "schedule"], + "keywords": [ + "cron", + "schedule" + ], "support": { "issues": "https://github.com/dragonmantank/cron-expression/issues", "source": "https://github.com/dragonmantank/cron-expression/tree/v3.3.3" @@ -853,7 +902,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Eduardo Gulias Davis" @@ -909,14 +960,20 @@ }, "type": "library", "autoload": { - "files": ["library/HTMLPurifier.composer.php"], + "files": [ + "library/HTMLPurifier.composer.php" + ], "psr-0": { "HTMLPurifier": "library/" }, - "exclude-from-classmap": ["/library/HTMLPurifier/Language/"] + "exclude-from-classmap": [ + "/library/HTMLPurifier/Language/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["LGPL-2.1-or-later"], + "license": [ + "LGPL-2.1-or-later" + ], "authors": [ { "name": "Edward Z. Yang", @@ -926,7 +983,9 @@ ], "description": "Standards compliant HTML filter written in PHP", "homepage": "http://htmlpurifier.org/", - "keywords": ["html"], + "keywords": [ + "html" + ], "support": { "issues": "https://github.com/ezyang/htmlpurifier/issues", "source": "https://github.com/ezyang/htmlpurifier/tree/v4.17.0" @@ -969,7 +1028,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], + "license": [ + "BSD-3-Clause" + ], "authors": [ { "name": "Neuman Vong", @@ -984,7 +1045,10 @@ ], "description": "A simple library to encode and decode JSON Web Tokens (JWT) in PHP. Should conform to the current spec.", "homepage": "https://github.com/firebase/php-jwt", - "keywords": ["jwt", "php"], + "keywords": [ + "jwt", + "php" + ], "support": { "issues": "https://github.com/firebase/php-jwt/issues", "source": "https://github.com/firebase/php-jwt/tree/v6.10.1" @@ -1026,7 +1090,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Fruitcake", @@ -1039,7 +1105,11 @@ ], "description": "Cross-origin resource sharing library for the Symfony HttpFoundation", "homepage": "https://github.com/fruitcake/php-cors", - "keywords": ["cors", "laravel", "symfony"], + "keywords": [ + "cors", + "laravel", + "symfony" + ], "support": { "issues": "https://github.com/fruitcake/php-cors/issues", "source": "https://github.com/fruitcake/php-cors/tree/v1.3.0" @@ -1084,7 +1154,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Graham Campbell", @@ -1162,13 +1234,17 @@ } }, "autoload": { - "files": ["src/functions_include.php"], + "files": [ + "src/functions_include.php" + ], "psr-4": { "GuzzleHttp\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Graham Campbell", @@ -1272,7 +1348,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Graham Campbell", @@ -1296,7 +1374,9 @@ } ], "description": "Guzzle promises library", - "keywords": ["promise"], + "keywords": [ + "promise" + ], "support": { "issues": "https://github.com/guzzle/promises/issues", "source": "https://github.com/guzzle/promises/tree/2.0.3" @@ -1362,7 +1442,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Graham Campbell", @@ -1467,7 +1549,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Graham Campbell", @@ -1491,7 +1575,10 @@ } ], "description": "A polyfill class for uri_template of PHP", - "keywords": ["guzzlehttp", "uri-template"], + "keywords": [ + "guzzlehttp", + "uri-template" + ], "support": { "issues": "https://github.com/guzzle/uri-template/issues", "source": "https://github.com/guzzle/uri-template/tree/v1.0.3" @@ -1514,16 +1601,16 @@ }, { "name": "laravel/framework", - "version": "v10.48.17", + "version": "v10.48.18", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "60f3c8f667b24a09e0392e26b1f40fb9067cdc3c" + "reference": "d9729d476c3efe79f950ebcb6de1ec8199a421e6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/60f3c8f667b24a09e0392e26b1f40fb9067cdc3c", - "reference": "60f3c8f667b24a09e0392e26b1f40fb9067cdc3c", + "url": "https://api.github.com/repos/laravel/framework/zipball/d9729d476c3efe79f950ebcb6de1ec8199a421e6", + "reference": "d9729d476c3efe79f950ebcb6de1ec8199a421e6", "shasum": "" }, "require": { @@ -1698,7 +1785,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Taylor Otwell", @@ -1707,12 +1796,15 @@ ], "description": "The Laravel Framework.", "homepage": "https://laravel.com", - "keywords": ["framework", "laravel"], + "keywords": [ + "framework", + "laravel" + ], "support": { "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2024-07-23T16:06:06+00:00" + "time": "2024-07-30T15:05:11+00:00" }, { "name": "laravel/prompts", @@ -1754,13 +1846,17 @@ } }, "autoload": { - "files": ["src/helpers.php"], + "files": [ + "src/helpers.php" + ], "psr-4": { "Laravel\\Prompts\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "description": "Add beautiful and user-friendly forms to your command-line applications.", "support": { "issues": "https://github.com/laravel/prompts/issues", @@ -1802,7 +1898,9 @@ "dev-master": "3.x-dev" }, "laravel": { - "providers": ["Laravel\\Sanctum\\SanctumServiceProvider"] + "providers": [ + "Laravel\\Sanctum\\SanctumServiceProvider" + ] } }, "autoload": { @@ -1811,7 +1909,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Taylor Otwell", @@ -1819,7 +1919,11 @@ } ], "description": "Laravel Sanctum provides a featherweight authentication system for SPAs and simple APIs.", - "keywords": ["auth", "laravel", "sanctum"], + "keywords": [ + "auth", + "laravel", + "sanctum" + ], "support": { "issues": "https://github.com/laravel/sanctum/issues", "source": "https://github.com/laravel/sanctum" @@ -1861,7 +1965,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Taylor Otwell", @@ -1873,7 +1979,11 @@ } ], "description": "Laravel Serializable Closure provides an easy and secure way to serialize closures in PHP.", - "keywords": ["closure", "laravel", "serializable"], + "keywords": [ + "closure", + "laravel", + "serializable" + ], "support": { "issues": "https://github.com/laravel/serializable-closure/issues", "source": "https://github.com/laravel/serializable-closure" @@ -1931,7 +2041,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Taylor Otwell", @@ -1940,7 +2052,10 @@ ], "description": "Laravel wrapper around OAuth 1 & OAuth 2 libraries.", "homepage": "https://laravel.com", - "keywords": ["laravel", "oauth"], + "keywords": [ + "laravel", + "oauth" + ], "support": { "issues": "https://github.com/laravel/socialite/issues", "source": "https://github.com/laravel/socialite" @@ -1980,7 +2095,9 @@ "type": "library", "extra": { "laravel": { - "providers": ["Laravel\\Tinker\\TinkerServiceProvider"] + "providers": [ + "Laravel\\Tinker\\TinkerServiceProvider" + ] } }, "autoload": { @@ -1989,7 +2106,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Taylor Otwell", @@ -1997,7 +2116,12 @@ } ], "description": "Powerful REPL for the Laravel framework.", - "keywords": ["REPL", "Tinker", "laravel", "psysh"], + "keywords": [ + "REPL", + "Tinker", + "laravel", + "psysh" + ], "support": { "issues": "https://github.com/laravel/tinker/issues", "source": "https://github.com/laravel/tinker/tree/v2.9.0" @@ -2006,34 +2130,34 @@ }, { "name": "lcobucci/clock", - "version": "2.3.0", + "version": "3.2.0", "source": { "type": "git", "url": "https://github.com/lcobucci/clock.git", - "reference": "c7aadcd6fd97ed9e199114269c0be3f335e38876" + "reference": "6f28b826ea01306b07980cb8320ab30b966cd715" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/lcobucci/clock/zipball/c7aadcd6fd97ed9e199114269c0be3f335e38876", - "reference": "c7aadcd6fd97ed9e199114269c0be3f335e38876", + "url": "https://api.github.com/repos/lcobucci/clock/zipball/6f28b826ea01306b07980cb8320ab30b966cd715", + "reference": "6f28b826ea01306b07980cb8320ab30b966cd715", "shasum": "" }, "require": { - "php": "~8.1.0 || ~8.2.0", - "stella-maris/clock": "^0.1.7" + "php": "~8.2.0 || ~8.3.0", + "psr/clock": "^1.0" }, "provide": { "psr/clock-implementation": "1.0" }, "require-dev": { - "infection/infection": "^0.26", - "lcobucci/coding-standard": "^9.0", - "phpstan/extension-installer": "^1.2", - "phpstan/phpstan": "^1.9.4", - "phpstan/phpstan-deprecation-rules": "^1.1.1", - "phpstan/phpstan-phpunit": "^1.3.2", - "phpstan/phpstan-strict-rules": "^1.4.4", - "phpunit/phpunit": "^9.5.27" + "infection/infection": "^0.27", + "lcobucci/coding-standard": "^11.0.0", + "phpstan/extension-installer": "^1.3.1", + "phpstan/phpstan": "^1.10.25", + "phpstan/phpstan-deprecation-rules": "^1.1.3", + "phpstan/phpstan-phpunit": "^1.3.13", + "phpstan/phpstan-strict-rules": "^1.5.1", + "phpunit/phpunit": "^10.2.3" }, "type": "library", "autoload": { @@ -2042,7 +2166,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Luís Cobucci", @@ -2052,7 +2178,7 @@ "description": "Yet another clock abstraction", "support": { "issues": "https://github.com/lcobucci/clock/issues", - "source": "https://github.com/lcobucci/clock/tree/2.3.0" + "source": "https://github.com/lcobucci/clock/tree/3.2.0" }, "funding": [ { @@ -2064,7 +2190,7 @@ "type": "patreon" } ], - "time": "2022-12-19T14:38:11+00:00" + "time": "2023-11-17T17:00:27+00:00" }, { "name": "lcobucci/jwt", @@ -2109,7 +2235,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], + "license": [ + "BSD-3-Clause" + ], "authors": [ { "name": "Luís Cobucci", @@ -2118,7 +2246,10 @@ } ], "description": "A simple library to work with JSON Web Token and JSON Web Signature", - "keywords": ["JWS", "jwt"], + "keywords": [ + "JWS", + "jwt" + ], "support": { "issues": "https://github.com/lcobucci/jwt/issues", "source": "https://github.com/lcobucci/jwt/tree/4.3.0" @@ -2191,7 +2322,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], + "license": [ + "BSD-3-Clause" + ], "authors": [ { "name": "Colin O'Dell", @@ -2277,7 +2410,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], + "license": [ + "BSD-3-Clause" + ], "authors": [ { "name": "Colin O'Dell", @@ -2373,7 +2508,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Frank de Jonge", @@ -2427,7 +2564,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Frank de Jonge", @@ -2435,7 +2574,13 @@ } ], "description": "Local filesystem adapter for Flysystem.", - "keywords": ["Flysystem", "file", "files", "filesystem", "local"], + "keywords": [ + "Flysystem", + "file", + "files", + "filesystem", + "local" + ], "support": { "source": "https://github.com/thephpleague/flysystem-local/tree/3.28.0" }, @@ -2471,7 +2616,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Frank de Jonge", @@ -2539,7 +2686,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Ben Corlett", @@ -2599,7 +2748,9 @@ "type": "library", "extra": { "laravel": { - "providers": ["Maatwebsite\\Excel\\ExcelServiceProvider"], + "providers": [ + "Maatwebsite\\Excel\\ExcelServiceProvider" + ], "aliases": { "Excel": "Maatwebsite\\Excel\\Facades\\Excel" } @@ -2611,7 +2762,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Patrick Brouwers", @@ -2685,7 +2838,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Paul Duncan", @@ -2705,7 +2860,10 @@ } ], "description": "ZipStream is a library for dynamically streaming dynamic zip files from PHP without writing to the disk at all on the server.", - "keywords": ["stream", "zip"], + "keywords": [ + "stream", + "zip" + ], "support": { "issues": "https://github.com/maennchen/ZipStream-PHP/issues", "source": "https://github.com/maennchen/ZipStream-PHP/tree/3.1.0" @@ -2752,7 +2910,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Mark Baker", @@ -2761,7 +2921,10 @@ ], "description": "PHP Class for working with complex numbers", "homepage": "https://github.com/MarkBaker/PHPComplex", - "keywords": ["complex", "mathematics"], + "keywords": [ + "complex", + "mathematics" + ], "support": { "issues": "https://github.com/MarkBaker/PHPComplex/issues", "source": "https://github.com/MarkBaker/PHPComplex/tree/3.0.2" @@ -2802,7 +2965,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Mark Baker", @@ -2811,7 +2976,11 @@ ], "description": "PHP Class for working with matrices", "homepage": "https://github.com/MarkBaker/PHPMatrix", - "keywords": ["mathematics", "matrix", "vector"], + "keywords": [ + "mathematics", + "matrix", + "vector" + ], "support": { "issues": "https://github.com/MarkBaker/PHPMatrix/issues", "source": "https://github.com/MarkBaker/PHPMatrix/tree/3.0.1" @@ -2886,7 +3055,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Jordi Boggiano", @@ -2896,7 +3067,11 @@ ], "description": "Sends your logs to files, sockets, inboxes, databases and various web services", "homepage": "https://github.com/Seldaek/monolog", - "keywords": ["log", "logging", "psr-3"], + "keywords": [ + "log", + "logging", + "psr-3" + ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", "source": "https://github.com/Seldaek/monolog/tree/3.7.0" @@ -2952,7 +3127,9 @@ "phpunit/phpunit": "^7.5.20 || ^8.5.26 || ^9.5.20", "squizlabs/php_codesniffer": "^3.4" }, - "bin": ["bin/carbon"], + "bin": [ + "bin/carbon" + ], "type": "library", "extra": { "branch-alias": { @@ -2960,10 +3137,14 @@ "dev-2.x": "2.x-dev" }, "laravel": { - "providers": ["Carbon\\Laravel\\ServiceProvider"] + "providers": [ + "Carbon\\Laravel\\ServiceProvider" + ] }, "phpstan": { - "includes": ["extension.neon"] + "includes": [ + "extension.neon" + ] } }, "autoload": { @@ -2972,7 +3153,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Brian Nesbitt", @@ -2986,7 +3169,11 @@ ], "description": "An API extension for DateTime that supports 281 different languages.", "homepage": "https://carbon.nesbot.com", - "keywords": ["date", "datetime", "time"], + "keywords": [ + "date", + "datetime", + "time" + ], "support": { "docs": "https://carbon.nesbot.com/docs", "issues": "https://github.com/briannesbitt/Carbon/issues", @@ -3038,10 +3225,16 @@ } }, "autoload": { - "classmap": ["src/"] + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause", "GPL-2.0-only", "GPL-3.0-only"], + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], "authors": [ { "name": "David Grudl", @@ -3054,7 +3247,10 @@ ], "description": "📐 Nette Schema: validating data structures against a given Schema.", "homepage": "https://nette.org", - "keywords": ["config", "nette"], + "keywords": [ + "config", + "nette" + ], "support": { "issues": "https://github.com/nette/schema/issues", "source": "https://github.com/nette/schema/tree/v1.3.0" @@ -3103,10 +3299,16 @@ } }, "autoload": { - "classmap": ["src/"] + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause", "GPL-2.0-only", "GPL-3.0-only"], + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], "authors": [ { "name": "David Grudl", @@ -3186,7 +3388,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Günther Debrauwer", @@ -3233,7 +3437,9 @@ "ircmaxell/php-yacc": "^0.0.7", "phpunit/phpunit": "^9.0" }, - "bin": ["bin/php-parse"], + "bin": [ + "bin/php-parse" + ], "type": "library", "extra": { "branch-alias": { @@ -3246,14 +3452,19 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], + "license": [ + "BSD-3-Clause" + ], "authors": [ { "name": "Nikita Popov" } ], "description": "A PHP parser written in PHP", - "keywords": ["parser", "php"], + "keywords": [ + "parser", + "php" + ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", "source": "https://github.com/nikic/PHP-Parser/tree/v5.1.0" @@ -3294,17 +3505,23 @@ "type": "library", "extra": { "laravel": { - "providers": ["Termwind\\Laravel\\TermwindServiceProvider"] + "providers": [ + "Termwind\\Laravel\\TermwindServiceProvider" + ] } }, "autoload": { - "files": ["src/Functions.php"], + "files": [ + "src/Functions.php" + ], "psr-4": { "Termwind\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Nuno Maduro", @@ -3312,7 +3529,14 @@ } ], "description": "Its like Tailwind CSS, but for the console.", - "keywords": ["cli", "console", "css", "package", "php", "style"], + "keywords": [ + "cli", + "console", + "css", + "package", + "php", + "style" + ], "support": { "issues": "https://github.com/nunomaduro/termwind/issues", "source": "https://github.com/nunomaduro/termwind/tree/v1.15.1" @@ -3361,7 +3585,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Paragon Initiative Enterprises", @@ -3424,7 +3650,9 @@ }, "type": "library", "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Paragon Initiative Enterprises", @@ -3433,7 +3661,12 @@ } ], "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", - "keywords": ["csprng", "polyfill", "pseudorandom", "random"], + "keywords": [ + "csprng", + "polyfill", + "pseudorandom", + "random" + ], "support": { "email": "info@paragonie.com", "issues": "https://github.com/paragonie/random_compat/issues", @@ -3505,7 +3738,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Maarten Balliauw", @@ -3581,7 +3816,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["Apache-2.0"], + "license": [ + "Apache-2.0" + ], "authors": [ { "name": "Johannes M. Schmitt", @@ -3595,7 +3832,12 @@ } ], "description": "Option Type for PHP", - "keywords": ["language", "option", "php", "type"], + "keywords": [ + "language", + "option", + "php", + "type" + ], "support": { "issues": "https://github.com/schmittjoh/php-option/issues", "source": "https://github.com/schmittjoh/php-option/tree/1.9.3" @@ -3643,13 +3885,17 @@ }, "type": "library", "autoload": { - "files": ["phpseclib/bootstrap.php"], + "files": [ + "phpseclib/bootstrap.php" + ], "psr-4": { "phpseclib3\\": "phpseclib/" } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Jim Wigginton", @@ -3750,7 +3996,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Till Krüss", @@ -3760,7 +4008,11 @@ ], "description": "A flexible and feature-complete Redis client for PHP.", "homepage": "http://github.com/predis/predis", - "keywords": ["nosql", "predis", "redis"], + "keywords": [ + "nosql", + "predis", + "redis" + ], "support": { "issues": "https://github.com/predis/predis/issues", "source": "https://github.com/predis/predis/tree/v2.2.2" @@ -3775,16 +4027,16 @@ }, { "name": "promphp/prometheus_client_php", - "version": "v2.10.0", + "version": "v2.11.0", "source": { "type": "git", "url": "https://github.com/PromPHP/prometheus_client_php.git", - "reference": "a09ea80ec1ec26dd1d4853e9af2a811e898dbfeb" + "reference": "35d5a68628ea18209938bc1b8796646015ab93cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PromPHP/prometheus_client_php/zipball/a09ea80ec1ec26dd1d4853e9af2a811e898dbfeb", - "reference": "a09ea80ec1ec26dd1d4853e9af2a811e898dbfeb", + "url": "https://api.github.com/repos/PromPHP/prometheus_client_php/zipball/35d5a68628ea18209938bc1b8796646015ab93cf", + "reference": "35d5a68628ea18209938bc1b8796646015ab93cf", "shasum": "" }, "require": { @@ -3808,6 +4060,7 @@ }, "suggest": { "ext-apc": "Required if using APCu.", + "ext-pdo": "Required if using PDO.", "ext-redis": "Required if using Redis.", "promphp/prometheus_push_gateway_php": "An easy client for using Prometheus PushGateway.", "symfony/polyfill-apcu": "Required if you use APCu on PHP8.0+" @@ -3824,7 +4077,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["Apache-2.0"], + "license": [ + "Apache-2.0" + ], "authors": [ { "name": "Lukas Kämmerling", @@ -3834,9 +4089,9 @@ "description": "Prometheus instrumentation library for PHP applications.", "support": { "issues": "https://github.com/PromPHP/prometheus_client_php/issues", - "source": "https://github.com/PromPHP/prometheus_client_php/tree/v2.10.0" + "source": "https://github.com/PromPHP/prometheus_client_php/tree/v2.11.0" }, - "time": "2024-02-01T13:28:34+00:00" + "time": "2024-08-05T07:58:08+00:00" }, { "name": "psr/cache", @@ -3867,7 +4122,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "PHP-FIG", @@ -3875,7 +4132,11 @@ } ], "description": "Common interface for caching libraries", - "keywords": ["cache", "psr", "psr-6"], + "keywords": [ + "cache", + "psr", + "psr-6" + ], "support": { "source": "https://github.com/php-fig/cache/tree/3.0.0" }, @@ -3905,7 +4166,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "PHP-FIG", @@ -3914,7 +4177,13 @@ ], "description": "Common interface for reading the clock.", "homepage": "https://github.com/php-fig/clock", - "keywords": ["clock", "now", "psr", "psr-20", "time"], + "keywords": [ + "clock", + "now", + "psr", + "psr-20", + "time" + ], "support": { "issues": "https://github.com/php-fig/clock/issues", "source": "https://github.com/php-fig/clock/tree/1.0.0" @@ -3950,7 +4219,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "PHP-FIG", @@ -4001,7 +4272,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "PHP-FIG", @@ -4009,7 +4282,11 @@ } ], "description": "Standard interfaces for event handling.", - "keywords": ["events", "psr", "psr-14"], + "keywords": [ + "events", + "psr", + "psr-14" + ], "support": { "issues": "https://github.com/php-fig/event-dispatcher/issues", "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" @@ -4046,7 +4323,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "PHP-FIG", @@ -4055,7 +4334,12 @@ ], "description": "Common interface for HTTP clients", "homepage": "https://github.com/php-fig/http-client", - "keywords": ["http", "http-client", "psr", "psr-18"], + "keywords": [ + "http", + "http-client", + "psr", + "psr-18" + ], "support": { "source": "https://github.com/php-fig/http-client" }, @@ -4091,7 +4375,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "PHP-FIG", @@ -4143,7 +4429,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "PHP-FIG", @@ -4194,7 +4482,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "PHP-FIG", @@ -4203,7 +4493,11 @@ ], "description": "Common interface for logging libraries", "homepage": "https://github.com/php-fig/log", - "keywords": ["log", "psr", "psr-3"], + "keywords": [ + "log", + "psr", + "psr-3" + ], "support": { "source": "https://github.com/php-fig/log/tree/3.0.0" }, @@ -4238,7 +4532,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "PHP-FIG", @@ -4246,7 +4542,13 @@ } ], "description": "Common interfaces for simple caching", - "keywords": ["cache", "caching", "psr", "psr-16", "simple-cache"], + "keywords": [ + "cache", + "caching", + "psr", + "psr-16", + "simple-cache" + ], "support": { "source": "https://github.com/php-fig/simple-cache/tree/3.0.0" }, @@ -4285,7 +4587,9 @@ "ext-pdo-sqlite": "The doc command requires SQLite to work.", "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well." }, - "bin": ["bin/psysh"], + "bin": [ + "bin/psysh" + ], "type": "library", "extra": { "branch-alias": { @@ -4297,13 +4601,17 @@ } }, "autoload": { - "files": ["src/functions.php"], + "files": [ + "src/functions.php" + ], "psr-4": { "Psy\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Justin Hileman", @@ -4313,7 +4621,12 @@ ], "description": "An interactive shell for modern PHP.", "homepage": "http://psysh.org", - "keywords": ["REPL", "console", "interactive", "shell"], + "keywords": [ + "REPL", + "console", + "interactive", + "shell" + ], "support": { "issues": "https://github.com/bobthecow/psysh/issues", "source": "https://github.com/bobthecow/psysh/tree/v0.12.4" @@ -4343,10 +4656,14 @@ }, "type": "library", "autoload": { - "files": ["src/getallheaders.php"] + "files": [ + "src/getallheaders.php" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Ralph Khattar", @@ -4414,7 +4731,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Ben Ramsey", @@ -4423,7 +4742,14 @@ } ], "description": "A PHP library for representing and manipulating collections.", - "keywords": ["array", "collection", "hash", "map", "queue", "set"], + "keywords": [ + "array", + "collection", + "hash", + "map", + "queue", + "set" + ], "support": { "issues": "https://github.com/ramsey/collection/issues", "source": "https://github.com/ramsey/collection/tree/2.0.0" @@ -4499,15 +4825,23 @@ } }, "autoload": { - "files": ["src/functions.php"], + "files": [ + "src/functions.php" + ], "psr-4": { "Ramsey\\Uuid\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).", - "keywords": ["guid", "identifier", "uuid"], + "keywords": [ + "guid", + "identifier", + "uuid" + ], "support": { "issues": "https://github.com/ramsey/uuid/issues", "source": "https://github.com/ramsey/uuid/tree/4.7.6" @@ -4524,46 +4858,6 @@ ], "time": "2024-04-27T21:32:50+00:00" }, - { - "name": "stella-maris/clock", - "version": "0.1.7", - "source": { - "type": "git", - "url": "https://github.com/stella-maris-solutions/clock.git", - "reference": "fa23ce16019289a18bb3446fdecd45befcdd94f8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/stella-maris-solutions/clock/zipball/fa23ce16019289a18bb3446fdecd45befcdd94f8", - "reference": "fa23ce16019289a18bb3446fdecd45befcdd94f8", - "shasum": "" - }, - "require": { - "php": "^7.0|^8.0", - "psr/clock": "^1.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "StellaMaris\\Clock\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], - "authors": [ - { - "name": "Andreas Heigl", - "role": "Maintainer" - } - ], - "description": "A pre-release of the proposed PSR-20 Clock-Interface", - "homepage": "https://gitlab.com/stella-maris/clock", - "keywords": ["clock", "datetime", "point in time", "psr20"], - "support": { - "source": "https://github.com/stella-maris-solutions/clock/tree/0.1.7" - }, - "time": "2022-11-25T16:15:06+00:00" - }, { "name": "symfony/console", "version": "v6.4.10", @@ -4613,10 +4907,14 @@ "psr-4": { "Symfony\\Component\\Console\\": "" }, - "exclude-from-classmap": ["/Tests/"] + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Fabien Potencier", @@ -4629,7 +4927,12 @@ ], "description": "Eases the creation of beautiful and testable command line interfaces", "homepage": "https://symfony.com", - "keywords": ["cli", "command-line", "console", "terminal"], + "keywords": [ + "cli", + "command-line", + "console", + "terminal" + ], "support": { "source": "https://github.com/symfony/console/tree/v6.4.10" }, @@ -4651,30 +4954,34 @@ }, { "name": "symfony/css-selector", - "version": "v6.4.8", + "version": "v7.1.1", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "4b61b02fe15db48e3687ce1c45ea385d1780fe08" + "reference": "1c7cee86c6f812896af54434f8ce29c8d94f9ff4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/4b61b02fe15db48e3687ce1c45ea385d1780fe08", - "reference": "4b61b02fe15db48e3687ce1c45ea385d1780fe08", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/1c7cee86c6f812896af54434f8ce29c8d94f9ff4", + "reference": "1c7cee86c6f812896af54434f8ce29c8d94f9ff4", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "type": "library", "autoload": { "psr-4": { "Symfony\\Component\\CssSelector\\": "" }, - "exclude-from-classmap": ["/Tests/"] + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Fabien Potencier", @@ -4692,7 +4999,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v6.4.8" + "source": "https://github.com/symfony/css-selector/tree/v7.1.1" }, "funding": [ { @@ -4708,7 +5015,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-05-31T14:57:53+00:00" }, { "name": "symfony/deprecation-contracts", @@ -4738,10 +5045,14 @@ } }, "autoload": { - "files": ["function.php"] + "files": [ + "function.php" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Nicolas Grekas", @@ -4801,16 +5112,22 @@ "symfony/http-kernel": "^6.4|^7.0", "symfony/serializer": "^5.4|^6.0|^7.0" }, - "bin": ["Resources/bin/patch-type-declarations"], + "bin": [ + "Resources/bin/patch-type-declarations" + ], "type": "library", "autoload": { "psr-4": { "Symfony\\Component\\ErrorHandler\\": "" }, - "exclude-from-classmap": ["/Tests/"] + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Fabien Potencier", @@ -4844,24 +5161,24 @@ }, { "name": "symfony/event-dispatcher", - "version": "v6.4.8", + "version": "v7.1.1", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "8d7507f02b06e06815e56bb39aa0128e3806208b" + "reference": "9fa7f7a21beb22a39a8f3f28618b29e50d7a55a7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/8d7507f02b06e06815e56bb39aa0128e3806208b", - "reference": "8d7507f02b06e06815e56bb39aa0128e3806208b", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/9fa7f7a21beb22a39a8f3f28618b29e50d7a55a7", + "reference": "9fa7f7a21beb22a39a8f3f28618b29e50d7a55a7", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/event-dispatcher-contracts": "^2.5|^3" }, "conflict": { - "symfony/dependency-injection": "<5.4", + "symfony/dependency-injection": "<6.4", "symfony/service-contracts": "<2.5" }, "provide": { @@ -4870,23 +5187,27 @@ }, "require-dev": { "psr/log": "^1|^2|^3", - "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/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/error-handler": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", "symfony/service-contracts": "^2.5|^3", - "symfony/stopwatch": "^5.4|^6.0|^7.0" + "symfony/stopwatch": "^6.4|^7.0" }, "type": "library", "autoload": { "psr-4": { "Symfony\\Component\\EventDispatcher\\": "" }, - "exclude-from-classmap": ["/Tests/"] + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Fabien Potencier", @@ -4900,7 +5221,7 @@ "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.4.8" + "source": "https://github.com/symfony/event-dispatcher/tree/v7.1.1" }, "funding": [ { @@ -4916,7 +5237,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-05-31T14:57:53+00:00" }, { "name": "symfony/event-dispatcher-contracts", @@ -4952,7 +5273,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Nicolas Grekas", @@ -5017,10 +5340,14 @@ "psr-4": { "Symfony\\Component\\Finder\\": "" }, - "exclude-from-classmap": ["/Tests/"] + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Fabien Potencier", @@ -5090,10 +5417,14 @@ "psr-4": { "Symfony\\Component\\HttpFoundation\\": "" }, - "exclude-from-classmap": ["/Tests/"] + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Fabien Potencier", @@ -5200,10 +5531,14 @@ "psr-4": { "Symfony\\Component\\HttpKernel\\": "" }, - "exclude-from-classmap": ["/Tests/"] + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Fabien Potencier", @@ -5276,10 +5611,14 @@ "psr-4": { "Symfony\\Component\\Mailer\\": "" }, - "exclude-from-classmap": ["/Tests/"] + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Fabien Potencier", @@ -5353,10 +5692,14 @@ "psr-4": { "Symfony\\Component\\Mime\\": "" }, - "exclude-from-classmap": ["/Tests/"] + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Fabien Potencier", @@ -5369,7 +5712,10 @@ ], "description": "Allows manipulating MIME messages", "homepage": "https://symfony.com", - "keywords": ["mime", "mime-type"], + "keywords": [ + "mime", + "mime-type" + ], "support": { "source": "https://github.com/symfony/mime/tree/v6.4.9" }, @@ -5420,13 +5766,17 @@ } }, "autoload": { - "files": ["bootstrap.php"], + "files": [ + "bootstrap.php" + ], "psr-4": { "Symfony\\Polyfill\\Ctype\\": "" } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Gert de Pagter", @@ -5439,7 +5789,12 @@ ], "description": "Symfony polyfill for ctype functions", "homepage": "https://symfony.com", - "keywords": ["compatibility", "ctype", "polyfill", "portable"], + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], "support": { "source": "https://github.com/symfony/polyfill-ctype/tree/v1.30.0" }, @@ -5487,13 +5842,17 @@ } }, "autoload": { - "files": ["bootstrap.php"], + "files": [ + "bootstrap.php" + ], "psr-4": { "Symfony\\Polyfill\\Intl\\Grapheme\\": "" } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Nicolas Grekas", @@ -5563,13 +5922,17 @@ } }, "autoload": { - "files": ["bootstrap.php"], + "files": [ + "bootstrap.php" + ], "psr-4": { "Symfony\\Polyfill\\Intl\\Idn\\": "" } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Laurent Bassin", @@ -5641,14 +6004,20 @@ } }, "autoload": { - "files": ["bootstrap.php"], + "files": [ + "bootstrap.php" + ], "psr-4": { "Symfony\\Polyfill\\Intl\\Normalizer\\": "" }, - "classmap": ["Resources/stubs"] + "classmap": [ + "Resources/stubs" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Nicolas Grekas", @@ -5719,13 +6088,17 @@ } }, "autoload": { - "files": ["bootstrap.php"], + "files": [ + "bootstrap.php" + ], "psr-4": { "Symfony\\Polyfill\\Mbstring\\": "" } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Nicolas Grekas", @@ -5789,13 +6162,17 @@ } }, "autoload": { - "files": ["bootstrap.php"], + "files": [ + "bootstrap.php" + ], "psr-4": { "Symfony\\Polyfill\\Php72\\": "" } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Nicolas Grekas", @@ -5808,7 +6185,12 @@ ], "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", "homepage": "https://symfony.com", - "keywords": ["compatibility", "polyfill", "portable", "shim"], + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], "support": { "source": "https://github.com/symfony/polyfill-php72/tree/v1.30.0" }, @@ -5853,14 +6235,20 @@ } }, "autoload": { - "files": ["bootstrap.php"], + "files": [ + "bootstrap.php" + ], "psr-4": { "Symfony\\Polyfill\\Php80\\": "" }, - "classmap": ["Resources/stubs"] + "classmap": [ + "Resources/stubs" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Ion Bazan", @@ -5877,7 +6265,12 @@ ], "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", "homepage": "https://symfony.com", - "keywords": ["compatibility", "polyfill", "portable", "shim"], + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], "support": { "source": "https://github.com/symfony/polyfill-php80/tree/v1.30.0" }, @@ -5922,14 +6315,20 @@ } }, "autoload": { - "files": ["bootstrap.php"], + "files": [ + "bootstrap.php" + ], "psr-4": { "Symfony\\Polyfill\\Php83\\": "" }, - "classmap": ["Resources/stubs"] + "classmap": [ + "Resources/stubs" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Nicolas Grekas", @@ -5942,7 +6341,12 @@ ], "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions", "homepage": "https://symfony.com", - "keywords": ["compatibility", "polyfill", "portable", "shim"], + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], "support": { "source": "https://github.com/symfony/polyfill-php83/tree/v1.30.0" }, @@ -5993,13 +6397,17 @@ } }, "autoload": { - "files": ["bootstrap.php"], + "files": [ + "bootstrap.php" + ], "psr-4": { "Symfony\\Polyfill\\Uuid\\": "" } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Grégoire Pineau", @@ -6012,7 +6420,12 @@ ], "description": "Symfony polyfill for uuid functions", "homepage": "https://symfony.com", - "keywords": ["compatibility", "polyfill", "portable", "uuid"], + "keywords": [ + "compatibility", + "polyfill", + "portable", + "uuid" + ], "support": { "source": "https://github.com/symfony/polyfill-uuid/tree/v1.30.0" }, @@ -6054,10 +6467,14 @@ "psr-4": { "Symfony\\Component\\Process\\": "" }, - "exclude-from-classmap": ["/Tests/"] + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Fabien Potencier", @@ -6127,10 +6544,14 @@ "psr-4": { "Symfony\\Component\\Routing\\": "" }, - "exclude-from-classmap": ["/Tests/"] + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Fabien Potencier", @@ -6143,7 +6564,12 @@ ], "description": "Maps an HTTP request to a set of configuration variables", "homepage": "https://symfony.com", - "keywords": ["router", "routing", "uri", "url"], + "keywords": [ + "router", + "routing", + "uri", + "url" + ], "support": { "source": "https://github.com/symfony/routing/tree/v6.4.10" }, @@ -6199,10 +6625,14 @@ "psr-4": { "Symfony\\Contracts\\Service\\": "" }, - "exclude-from-classmap": ["/Test/"] + "exclude-from-classmap": [ + "/Test/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Nicolas Grekas", @@ -6244,20 +6674,20 @@ }, { "name": "symfony/string", - "version": "v6.4.10", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "ccf9b30251719567bfd46494138327522b9a9446" + "reference": "ea272a882be7f20cad58d5d78c215001617b7f07" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/ccf9b30251719567bfd46494138327522b9a9446", - "reference": "ccf9b30251719567bfd46494138327522b9a9446", + "url": "https://api.github.com/repos/symfony/string/zipball/ea272a882be7f20cad58d5d78c215001617b7f07", + "reference": "ea272a882be7f20cad58d5d78c215001617b7f07", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-intl-grapheme": "~1.0", "symfony/polyfill-intl-normalizer": "~1.0", @@ -6267,22 +6697,29 @@ "symfony/translation-contracts": "<2.5" }, "require-dev": { - "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/emoji": "^7.1", + "symfony/error-handler": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", "symfony/translation-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^5.4|^6.0|^7.0" + "symfony/var-exporter": "^6.4|^7.0" }, "type": "library", "autoload": { - "files": ["Resources/functions.php"], + "files": [ + "Resources/functions.php" + ], "psr-4": { "Symfony\\Component\\String\\": "" }, - "exclude-from-classmap": ["/Tests/"] + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Nicolas Grekas", @@ -6304,7 +6741,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.4.10" + "source": "https://github.com/symfony/string/tree/v7.1.3" }, "funding": [ { @@ -6320,7 +6757,7 @@ "type": "tidelift" } ], - "time": "2024-07-22T10:21:14+00:00" + "time": "2024-07-22T10:25:37+00:00" }, { "name": "symfony/translation", @@ -6372,14 +6809,20 @@ }, "type": "library", "autoload": { - "files": ["Resources/functions.php"], + "files": [ + "Resources/functions.php" + ], "psr-4": { "Symfony\\Component\\Translation\\": "" }, - "exclude-from-classmap": ["/Tests/"] + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Fabien Potencier", @@ -6442,10 +6885,14 @@ "psr-4": { "Symfony\\Contracts\\Translation\\": "" }, - "exclude-from-classmap": ["/Test/"] + "exclude-from-classmap": [ + "/Test/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Nicolas Grekas", @@ -6511,10 +6958,14 @@ "psr-4": { "Symfony\\Component\\Uid\\": "" }, - "exclude-from-classmap": ["/Tests/"] + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Grégoire Pineau", @@ -6531,7 +6982,11 @@ ], "description": "Provides an object-oriented API to generate and represent UIDs", "homepage": "https://symfony.com", - "keywords": ["UID", "ulid", "uuid"], + "keywords": [ + "UID", + "ulid", + "uuid" + ], "support": { "source": "https://github.com/symfony/uid/tree/v6.4.8" }, @@ -6582,17 +7037,25 @@ "symfony/uid": "^5.4|^6.0|^7.0", "twig/twig": "^2.13|^3.0.4" }, - "bin": ["Resources/bin/var-dump-server"], + "bin": [ + "Resources/bin/var-dump-server" + ], "type": "library", "autoload": { - "files": ["Resources/functions/dump.php"], + "files": [ + "Resources/functions/dump.php" + ], "psr-4": { "Symfony\\Component\\VarDumper\\": "" }, - "exclude-from-classmap": ["/Tests/"] + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Nicolas Grekas", @@ -6605,7 +7068,10 @@ ], "description": "Provides mechanisms for walking through any arbitrary PHP variable", "homepage": "https://symfony.com", - "keywords": ["debug", "dump"], + "keywords": [ + "debug", + "dump" + ], "support": { "source": "https://github.com/symfony/var-dumper/tree/v6.4.10" }, @@ -6660,7 +7126,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], + "license": [ + "BSD-3-Clause" + ], "authors": [ { "name": "Tijs Verkoyen", @@ -6728,7 +7196,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Sean Tymon", @@ -6805,7 +7275,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], + "license": [ + "BSD-3-Clause" + ], "authors": [ { "name": "Graham Campbell", @@ -6819,7 +7291,11 @@ } ], "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", - "keywords": ["dotenv", "env", "environment"], + "keywords": [ + "dotenv", + "env", + "environment" + ], "support": { "issues": "https://github.com/vlucas/phpdotenv/issues", "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.1" @@ -6866,7 +7342,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Lars Moelleken", @@ -6875,7 +7353,11 @@ ], "description": "Portable ASCII library - performance optimized (ascii) string functions for php.", "homepage": "https://github.com/voku/portable-ascii", - "keywords": ["ascii", "clean", "php"], + "keywords": [ + "ascii", + "clean", + "php" + ], "support": { "issues": "https://github.com/voku/portable-ascii/issues", "source": "https://github.com/voku/portable-ascii/tree/2.0.1" @@ -6941,7 +7423,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Bernhard Schussek", @@ -6949,7 +7433,11 @@ } ], "description": "Assertions to validate method input/output with nice error messages.", - "keywords": ["assert", "check", "validate"], + "keywords": [ + "assert", + "check", + "validate" + ], "support": { "issues": "https://github.com/webmozarts/assert/issues", "source": "https://github.com/webmozarts/assert/tree/1.11.0" @@ -6986,7 +7474,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Emanuil Rusev", @@ -6996,7 +7486,10 @@ ], "description": "Parser for Markdown.", "homepage": "http://parsedown.org", - "keywords": ["markdown", "parser"], + "keywords": [ + "markdown", + "parser" + ], "support": { "issues": "https://github.com/erusev/parsedown/issues", "source": "https://github.com/erusev/parsedown/tree/1.7.x" @@ -7046,14 +7539,20 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "François Zaninotto" } ], "description": "Faker is a PHP library that generates fake data for you.", - "keywords": ["data", "faker", "fixtures"], + "keywords": [ + "data", + "faker", + "fixtures" + ], "support": { "issues": "https://github.com/FakerPHP/Faker/issues", "source": "https://github.com/FakerPHP/Faker/tree/v1.23.1" @@ -7099,7 +7598,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Filipe Dobreira", @@ -7162,12 +7663,18 @@ } }, "autoload": { - "classmap": ["hamcrest"] + "classmap": [ + "hamcrest" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], + "license": [ + "BSD-3-Clause" + ], "description": "This is the PHP port of Hamcrest Matchers", - "keywords": ["test"], + "keywords": [ + "test" + ], "support": { "issues": "https://github.com/hamcrest/hamcrest-php/issues", "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1" @@ -7229,7 +7736,9 @@ "type": "library", "extra": { "laravel": { - "providers": ["Knuckles\\Scribe\\ScribeServiceProvider"] + "providers": [ + "Knuckles\\Scribe\\ScribeServiceProvider" + ] } }, "autoload": { @@ -7239,7 +7748,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Shalvah" @@ -7247,7 +7758,12 @@ ], "description": "Generate API documentation for humans from your Laravel codebase.✍", "homepage": "http://github.com/knuckleswtf/scribe", - "keywords": ["api", "dingo", "documentation", "laravel"], + "keywords": [ + "api", + "dingo", + "documentation", + "laravel" + ], "support": { "issues": "https://github.com/knuckleswtf/scribe/issues", "source": "https://github.com/knuckleswtf/scribe/tree/4.37.1" @@ -7262,16 +7778,16 @@ }, { "name": "laravel/pint", - "version": "v1.17.0", + "version": "v1.17.1", "source": { "type": "git", "url": "https://github.com/laravel/pint.git", - "reference": "4dba80c1de4b81dc4c4fb10ea6f4781495eb29f5" + "reference": "b5b6f716db298671c1dfea5b1082ec2c0ae7064f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/pint/zipball/4dba80c1de4b81dc4c4fb10ea6f4781495eb29f5", - "reference": "4dba80c1de4b81dc4c4fb10ea6f4781495eb29f5", + "url": "https://api.github.com/repos/laravel/pint/zipball/b5b6f716db298671c1dfea5b1082ec2c0ae7064f", + "reference": "b5b6f716db298671c1dfea5b1082ec2c0ae7064f", "shasum": "" }, "require": { @@ -7290,7 +7806,9 @@ "nunomaduro/termwind": "^1.15.1", "pestphp/pest": "^2.34.8" }, - "bin": ["builds/pint"], + "bin": [ + "builds/pint" + ], "type": "project", "autoload": { "psr-4": { @@ -7300,7 +7818,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Nuno Maduro", @@ -7309,12 +7829,18 @@ ], "description": "An opinionated code formatter for PHP.", "homepage": "https://laravel.com", - "keywords": ["format", "formatter", "lint", "linter", "php"], + "keywords": [ + "format", + "formatter", + "lint", + "linter", + "php" + ], "support": { "issues": "https://github.com/laravel/pint/issues", "source": "https://github.com/laravel/pint" }, - "time": "2024-07-23T16:40:20+00:00" + "time": "2024-08-01T09:06:33+00:00" }, { "name": "laravel/sail", @@ -7342,11 +7868,15 @@ "orchestra/testbench": "^7.0|^8.0|^9.0", "phpstan/phpstan": "^1.10" }, - "bin": ["bin/sail"], + "bin": [ + "bin/sail" + ], "type": "library", "extra": { "laravel": { - "providers": ["Laravel\\Sail\\SailServiceProvider"] + "providers": [ + "Laravel\\Sail\\SailServiceProvider" + ] } }, "autoload": { @@ -7355,7 +7885,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Taylor Otwell", @@ -7363,7 +7895,10 @@ } ], "description": "Docker files for running a basic Laravel application.", - "keywords": ["docker", "laravel"], + "keywords": [ + "docker", + "laravel" + ], "support": { "issues": "https://github.com/laravel/sail/issues", "source": "https://github.com/laravel/sail" @@ -7398,13 +7933,18 @@ }, "type": "library", "autoload": { - "files": ["library/helpers.php", "library/Mockery.php"], + "files": [ + "library/helpers.php", + "library/Mockery.php" + ], "psr-4": { "Mockery\\": "library/Mockery" } }, "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], + "license": [ + "BSD-3-Clause" + ], "authors": [ { "name": "Pádraic Brady", @@ -7480,11 +8020,15 @@ }, "autoload": { "psr-0": { - "Mpociot": ["src/"] + "Mpociot": [ + "src/" + ] } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Mike van Riel", @@ -7526,13 +8070,17 @@ }, "type": "library", "autoload": { - "files": ["src/DeepCopy/deep_copy.php"], + "files": [ + "src/DeepCopy/deep_copy.php" + ], "psr-4": { "DeepCopy\\": "src/DeepCopy/" } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "description": "Create deep copies (clones) of your objects", "keywords": [ "clone", @@ -7599,13 +8147,17 @@ } }, "autoload": { - "files": ["./src/Adapters/Phpunit/Autoload.php"], + "files": [ + "./src/Adapters/Phpunit/Autoload.php" + ], "psr-4": { "NunoMaduro\\Collision\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Nuno Maduro", @@ -7674,10 +8226,14 @@ } }, "autoload": { - "classmap": ["src/"] + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], + "license": [ + "BSD-3-Clause" + ], "authors": [ { "name": "Arne Blankerts", @@ -7727,10 +8283,14 @@ }, "type": "library", "autoload": { - "classmap": ["src/"] + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], + "license": [ + "BSD-3-Clause" + ], "authors": [ { "name": "Arne Blankerts", @@ -7798,10 +8358,14 @@ } }, "autoload": { - "classmap": ["src/"] + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], + "license": [ + "BSD-3-Clause" + ], "authors": [ { "name": "Sebastian Bergmann", @@ -7811,7 +8375,11 @@ ], "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", "homepage": "https://github.com/sebastianbergmann/php-code-coverage", - "keywords": ["coverage", "testing", "xunit"], + "keywords": [ + "coverage", + "testing", + "xunit" + ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", @@ -7852,10 +8420,14 @@ } }, "autoload": { - "classmap": ["src/"] + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], + "license": [ + "BSD-3-Clause" + ], "authors": [ { "name": "Sebastian Bergmann", @@ -7865,7 +8437,10 @@ ], "description": "FilterIterator implementation that filters files based on a list of suffixes.", "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", - "keywords": ["filesystem", "iterator"], + "keywords": [ + "filesystem", + "iterator" + ], "support": { "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", @@ -7910,10 +8485,14 @@ } }, "autoload": { - "classmap": ["src/"] + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], + "license": [ + "BSD-3-Clause" + ], "authors": [ { "name": "Sebastian Bergmann", @@ -7923,7 +8502,9 @@ ], "description": "Invoke callables with a timeout", "homepage": "https://github.com/sebastianbergmann/php-invoker/", - "keywords": ["process"], + "keywords": [ + "process" + ], "support": { "issues": "https://github.com/sebastianbergmann/php-invoker/issues", "source": "https://github.com/sebastianbergmann/php-invoker/tree/4.0.0" @@ -7963,10 +8544,14 @@ } }, "autoload": { - "classmap": ["src/"] + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], + "license": [ + "BSD-3-Clause" + ], "authors": [ { "name": "Sebastian Bergmann", @@ -7976,7 +8561,9 @@ ], "description": "Simple template engine.", "homepage": "https://github.com/sebastianbergmann/php-text-template/", - "keywords": ["template"], + "keywords": [ + "template" + ], "support": { "issues": "https://github.com/sebastianbergmann/php-text-template/issues", "security": "https://github.com/sebastianbergmann/php-text-template/security/policy", @@ -8017,10 +8604,14 @@ } }, "autoload": { - "classmap": ["src/"] + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], + "license": [ + "BSD-3-Clause" + ], "authors": [ { "name": "Sebastian Bergmann", @@ -8030,7 +8621,9 @@ ], "description": "Utility class for timing", "homepage": "https://github.com/sebastianbergmann/php-timer/", - "keywords": ["timer"], + "keywords": [ + "timer" + ], "support": { "issues": "https://github.com/sebastianbergmann/php-timer/issues", "source": "https://github.com/sebastianbergmann/php-timer/tree/6.0.0" @@ -8045,16 +8638,16 @@ }, { "name": "phpunit/phpunit", - "version": "10.5.28", + "version": "10.5.29", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "ff7fb85cdf88131b83e721fb2a327b664dbed275" + "reference": "8e9e80872b4e8064401788ee8a32d40b4455318f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/ff7fb85cdf88131b83e721fb2a327b664dbed275", - "reference": "ff7fb85cdf88131b83e721fb2a327b664dbed275", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/8e9e80872b4e8064401788ee8a32d40b4455318f", + "reference": "8e9e80872b4e8064401788ee8a32d40b4455318f", "shasum": "" }, "require": { @@ -8088,7 +8681,9 @@ "suggest": { "ext-soap": "To be able to generate mocks based on WSDL files" }, - "bin": ["phpunit"], + "bin": [ + "phpunit" + ], "type": "library", "extra": { "branch-alias": { @@ -8096,11 +8691,17 @@ } }, "autoload": { - "files": ["src/Framework/Assert/Functions.php"], - "classmap": ["src/"] + "files": [ + "src/Framework/Assert/Functions.php" + ], + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], + "license": [ + "BSD-3-Clause" + ], "authors": [ { "name": "Sebastian Bergmann", @@ -8110,11 +8711,15 @@ ], "description": "The PHP Unit Testing framework.", "homepage": "https://phpunit.de/", - "keywords": ["phpunit", "testing", "xunit"], + "keywords": [ + "phpunit", + "testing", + "xunit" + ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.28" + "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.29" }, "funding": [ { @@ -8130,7 +8735,7 @@ "type": "tidelift" } ], - "time": "2024-07-18T14:54:16+00:00" + "time": "2024-07-30T11:08:00+00:00" }, { "name": "sebastian/cli-parser", @@ -8159,10 +8764,14 @@ } }, "autoload": { - "classmap": ["src/"] + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], + "license": [ + "BSD-3-Clause" + ], "authors": [ { "name": "Sebastian Bergmann", @@ -8212,10 +8821,14 @@ } }, "autoload": { - "classmap": ["src/"] + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], + "license": [ + "BSD-3-Clause" + ], "authors": [ { "name": "Sebastian Bergmann", @@ -8264,10 +8877,14 @@ } }, "autoload": { - "classmap": ["src/"] + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], + "license": [ + "BSD-3-Clause" + ], "authors": [ { "name": "Sebastian Bergmann", @@ -8319,10 +8936,14 @@ } }, "autoload": { - "classmap": ["src/"] + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], + "license": [ + "BSD-3-Clause" + ], "authors": [ { "name": "Sebastian Bergmann", @@ -8343,7 +8964,11 @@ ], "description": "Provides the functionality to compare PHP values for equality", "homepage": "https://github.com/sebastianbergmann/comparator", - "keywords": ["comparator", "compare", "equality"], + "keywords": [ + "comparator", + "compare", + "equality" + ], "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", "security": "https://github.com/sebastianbergmann/comparator/security/policy", @@ -8385,10 +9010,14 @@ } }, "autoload": { - "classmap": ["src/"] + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], + "license": [ + "BSD-3-Clause" + ], "authors": [ { "name": "Sebastian Bergmann", @@ -8439,10 +9068,14 @@ } }, "autoload": { - "classmap": ["src/"] + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], + "license": [ + "BSD-3-Clause" + ], "authors": [ { "name": "Sebastian Bergmann", @@ -8455,7 +9088,12 @@ ], "description": "Diff implementation", "homepage": "https://github.com/sebastianbergmann/diff", - "keywords": ["diff", "udiff", "unidiff", "unified diff"], + "keywords": [ + "diff", + "udiff", + "unidiff", + "unified diff" + ], "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", "security": "https://github.com/sebastianbergmann/diff/security/policy", @@ -8499,10 +9137,14 @@ } }, "autoload": { - "classmap": ["src/"] + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], + "license": [ + "BSD-3-Clause" + ], "authors": [ { "name": "Sebastian Bergmann", @@ -8511,7 +9153,11 @@ ], "description": "Provides functionality to handle HHVM/PHP environments", "homepage": "https://github.com/sebastianbergmann/environment", - "keywords": ["Xdebug", "environment", "hhvm"], + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", "security": "https://github.com/sebastianbergmann/environment/security/policy", @@ -8554,10 +9200,14 @@ } }, "autoload": { - "classmap": ["src/"] + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], + "license": [ + "BSD-3-Clause" + ], "authors": [ { "name": "Sebastian Bergmann", @@ -8582,7 +9232,10 @@ ], "description": "Provides the functionality to export PHP variables for visualization", "homepage": "https://www.github.com/sebastianbergmann/exporter", - "keywords": ["export", "exporter"], + "keywords": [ + "export", + "exporter" + ], "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", "security": "https://github.com/sebastianbergmann/exporter/security/policy", @@ -8626,10 +9279,14 @@ } }, "autoload": { - "classmap": ["src/"] + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], + "license": [ + "BSD-3-Clause" + ], "authors": [ { "name": "Sebastian Bergmann", @@ -8638,7 +9295,9 @@ ], "description": "Snapshotting of global state", "homepage": "https://www.github.com/sebastianbergmann/global-state", - "keywords": ["global state"], + "keywords": [ + "global state" + ], "support": { "issues": "https://github.com/sebastianbergmann/global-state/issues", "security": "https://github.com/sebastianbergmann/global-state/security/policy", @@ -8680,10 +9339,14 @@ } }, "autoload": { - "classmap": ["src/"] + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], + "license": [ + "BSD-3-Clause" + ], "authors": [ { "name": "Sebastian Bergmann", @@ -8735,10 +9398,14 @@ } }, "autoload": { - "classmap": ["src/"] + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], + "license": [ + "BSD-3-Clause" + ], "authors": [ { "name": "Sebastian Bergmann", @@ -8786,10 +9453,14 @@ } }, "autoload": { - "classmap": ["src/"] + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], + "license": [ + "BSD-3-Clause" + ], "authors": [ { "name": "Sebastian Bergmann", @@ -8837,10 +9508,14 @@ } }, "autoload": { - "classmap": ["src/"] + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], + "license": [ + "BSD-3-Clause" + ], "authors": [ { "name": "Sebastian Bergmann", @@ -8896,10 +9571,14 @@ } }, "autoload": { - "classmap": ["src/"] + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], + "license": [ + "BSD-3-Clause" + ], "authors": [ { "name": "Sebastian Bergmann", @@ -8945,10 +9624,14 @@ } }, "autoload": { - "classmap": ["src/"] + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], + "license": [ + "BSD-3-Clause" + ], "authors": [ { "name": "Sebastian Bergmann", @@ -8994,15 +9677,23 @@ }, "type": "library", "autoload": { - "files": ["helpers.php"], + "files": [ + "helpers.php" + ], "psr-4": { "Shalvah\\Clara\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "description": "🔊 Simple, pretty, testable console output for CLI apps.", - "keywords": ["cli", "log", "logging"], + "keywords": [ + "cli", + "log", + "logging" + ], "support": { "issues": "https://github.com/shalvah/clara/issues", "source": "https://github.com/shalvah/clara/tree/3.2.0" @@ -9041,7 +9732,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Shalvah", @@ -9050,7 +9743,9 @@ ], "description": "Create automatic upgrades for your package.", "homepage": "http://github.com/shalvah/upgrader", - "keywords": ["upgrade"], + "keywords": [ + "upgrade" + ], "support": { "issues": "https://github.com/shalvah/upgrader/issues", "source": "https://github.com/shalvah/upgrader/tree/0.6.0" @@ -9094,7 +9789,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Freek Van de Herten", @@ -9105,7 +9802,10 @@ ], "description": "A better backtrace", "homepage": "https://github.com/spatie/backtrace", - "keywords": ["Backtrace", "spatie"], + "keywords": [ + "Backtrace", + "spatie" + ], "support": { "source": "https://github.com/spatie/backtrace/tree/1.6.2" }, @@ -9151,7 +9851,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Brent Roose", @@ -9162,7 +9864,10 @@ ], "description": "Data transfer objects with batteries included", "homepage": "https://github.com/spatie/data-transfer-object", - "keywords": ["data-transfer-object", "spatie"], + "keywords": [ + "data-transfer-object", + "spatie" + ], "support": { "issues": "https://github.com/spatie/data-transfer-object/issues", "source": "https://github.com/spatie/data-transfer-object/tree/3.9.1" @@ -9226,7 +9931,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Ruben Van Assche", @@ -9236,7 +9943,10 @@ ], "description": "This is my package error-solutions", "homepage": "https://github.com/spatie/error-solutions", - "keywords": ["error-solutions", "spatie"], + "keywords": [ + "error-solutions", + "spatie" + ], "support": { "issues": "https://github.com/spatie/error-solutions/issues", "source": "https://github.com/spatie/error-solutions/tree/1.1.1" @@ -9251,16 +9961,16 @@ }, { "name": "spatie/flare-client-php", - "version": "1.7.0", + "version": "1.8.0", "source": { "type": "git", "url": "https://github.com/spatie/flare-client-php.git", - "reference": "097040ff51e660e0f6fc863684ac4b02c93fa234" + "reference": "180f8ca4c0d0d6fc51477bd8c53ce37ab5a96122" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/097040ff51e660e0f6fc863684ac4b02c93fa234", - "reference": "097040ff51e660e0f6fc863684ac4b02c93fa234", + "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/180f8ca4c0d0d6fc51477bd8c53ce37ab5a96122", + "reference": "180f8ca4c0d0d6fc51477bd8c53ce37ab5a96122", "shasum": "" }, "require": { @@ -9278,7 +9988,7 @@ "phpstan/extension-installer": "^1.1", "phpstan/phpstan-deprecation-rules": "^1.0", "phpstan/phpstan-phpunit": "^1.0", - "spatie/phpunit-snapshot-assertions": "^4.0|^5.0" + "spatie/pest-plugin-snapshots": "^1.0|^2.0" }, "type": "library", "extra": { @@ -9287,19 +9997,28 @@ } }, "autoload": { - "files": ["src/helpers.php"], + "files": [ + "src/helpers.php" + ], "psr-4": { "Spatie\\FlareClient\\": "src" } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "description": "Send PHP errors to Flare", "homepage": "https://github.com/spatie/flare-client-php", - "keywords": ["exception", "flare", "reporting", "spatie"], + "keywords": [ + "exception", + "flare", + "reporting", + "spatie" + ], "support": { "issues": "https://github.com/spatie/flare-client-php/issues", - "source": "https://github.com/spatie/flare-client-php/tree/1.7.0" + "source": "https://github.com/spatie/flare-client-php/tree/1.8.0" }, "funding": [ { @@ -9307,7 +10026,7 @@ "type": "github" } ], - "time": "2024-06-12T14:39:14+00:00" + "time": "2024-08-01T08:27:26+00:00" }, { "name": "spatie/ignition", @@ -9360,7 +10079,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Spatie", @@ -9370,7 +10091,12 @@ ], "description": "A beautiful error page for PHP applications.", "homepage": "https://flareapp.io/ignition", - "keywords": ["error", "flare", "laravel", "page"], + "keywords": [ + "error", + "flare", + "laravel", + "page" + ], "support": { "docs": "https://flareapp.io/docs/ignition-for-laravel/introduction", "forum": "https://twitter.com/flareappio", @@ -9436,13 +10162,17 @@ } }, "autoload": { - "files": ["src/helpers.php"], + "files": [ + "src/helpers.php" + ], "psr-4": { "Spatie\\LaravelIgnition\\": "src" } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Spatie", @@ -9452,7 +10182,12 @@ ], "description": "A beautiful error page for Laravel applications.", "homepage": "https://flareapp.io/ignition", - "keywords": ["error", "flare", "laravel", "page"], + "keywords": [ + "error", + "flare", + "laravel", + "page" + ], "support": { "docs": "https://flareapp.io/docs/ignition-for-laravel/introduction", "forum": "https://twitter.com/flareappio", @@ -9469,36 +10204,39 @@ }, { "name": "symfony/var-exporter", - "version": "v6.4.9", + "version": "v7.1.2", "source": { "type": "git", "url": "https://github.com/symfony/var-exporter.git", - "reference": "f9a060622e0d93777b7f8687ec4860191e16802e" + "reference": "b80a669a2264609f07f1667f891dbfca25eba44c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/f9a060622e0d93777b7f8687ec4860191e16802e", - "reference": "f9a060622e0d93777b7f8687ec4860191e16802e", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/b80a669a2264609f07f1667f891dbfca25eba44c", + "reference": "b80a669a2264609f07f1667f891dbfca25eba44c", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3" + "php": ">=8.2" }, "require-dev": { "symfony/property-access": "^6.4|^7.0", "symfony/serializer": "^6.4|^7.0", - "symfony/var-dumper": "^5.4|^6.0|^7.0" + "symfony/var-dumper": "^6.4|^7.0" }, "type": "library", "autoload": { "psr-4": { "Symfony\\Component\\VarExporter\\": "" }, - "exclude-from-classmap": ["/Tests/"] + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Nicolas Grekas", @@ -9522,7 +10260,7 @@ "serialize" ], "support": { - "source": "https://github.com/symfony/var-exporter/tree/v6.4.9" + "source": "https://github.com/symfony/var-exporter/tree/v7.1.2" }, "funding": [ { @@ -9538,43 +10276,48 @@ "type": "tidelift" } ], - "time": "2024-06-24T15:53:56+00:00" + "time": "2024-06-28T08:00:31+00:00" }, { "name": "symfony/yaml", - "version": "v6.4.8", + "version": "v7.1.1", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "52903de178d542850f6f341ba92995d3d63e60c9" + "reference": "fa34c77015aa6720469db7003567b9f772492bf2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/52903de178d542850f6f341ba92995d3d63e60c9", - "reference": "52903de178d542850f6f341ba92995d3d63e60c9", + "url": "https://api.github.com/repos/symfony/yaml/zipball/fa34c77015aa6720469db7003567b9f772492bf2", + "reference": "fa34c77015aa6720469db7003567b9f772492bf2", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", + "php": ">=8.2", "symfony/polyfill-ctype": "^1.8" }, "conflict": { - "symfony/console": "<5.4" + "symfony/console": "<6.4" }, "require-dev": { - "symfony/console": "^5.4|^6.0|^7.0" + "symfony/console": "^6.4|^7.0" }, - "bin": ["Resources/bin/yaml-lint"], + "bin": [ + "Resources/bin/yaml-lint" + ], "type": "library", "autoload": { "psr-4": { "Symfony\\Component\\Yaml\\": "" }, - "exclude-from-classmap": ["/Tests/"] + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Fabien Potencier", @@ -9588,7 +10331,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v6.4.8" + "source": "https://github.com/symfony/yaml/tree/v7.1.1" }, "funding": [ { @@ -9604,7 +10347,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-05-31T14:57:53+00:00" }, { "name": "theseer/tokenizer", @@ -9628,10 +10371,14 @@ }, "type": "library", "autoload": { - "classmap": ["src/"] + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], + "license": [ + "BSD-3-Clause" + ], "authors": [ { "name": "Arne Blankerts", @@ -9663,5 +10410,5 @@ "ext-zip": "*" }, "platform-dev": [], - "plugin-api-version": "2.6.0" + "plugin-api-version": "2.3.0" } diff --git a/routes/api.php b/routes/api.php index 5a5f67bf..a2c8f65f 100755 --- a/routes/api.php +++ b/routes/api.php @@ -42,6 +42,7 @@ use App\Http\Controllers\Api\V1\JobSearchController; use App\Http\Controllers\Api\V1\WaitListController; use App\Http\Controllers\Api\V1\CookiePreferencesController; +use Illuminate\Http\Request; @@ -75,7 +76,6 @@ Route::post('/auth/reset-forgot-password', [ForgetResetPasswordController::class, 'resetPassword']); Route::post('/auth/verify-forgot-otp', [ForgetResetPasswordController::class, 'verifyUserOTP']); - Route::post('/roles', [RoleController::class, 'store']); Route::get('/auth/login-facebook', [SocialAuthController::class, 'loginUsingFacebook']); Route::get('/auth/facebook/callback', [SocialAuthController::class, 'callbackFromFacebook']); @@ -188,14 +188,13 @@ Route::put('/jobs/{id}', [JobController::class, 'update']); Route::delete('/jobs/{id}', [JobController::class, 'destroy']); - - Route::get('/user/export/{format}', [ExportUserController::class, 'export']); // Accounts Route::patch('/accounts/deactivate', [AccountController::class, 'deactivate']); // Roles + Route::post('/organisations/{org_id}/roles', [RoleController::class, 'store']); Route::put('/organisations/{org_id}/roles/{role_id}', [RoleController::class, 'update']); Route::put('/organisations/{org_id}/roles/{role_id}/disable', [RoleController::class, 'disableRole']); Route::get('/organisations/{org_id}/roles', [RoleController::class, 'index']); diff --git a/tests/Feature/PermissionTest.php b/tests/Feature/PermissionTest.php index a26ac459..e178126e 100644 --- a/tests/Feature/PermissionTest.php +++ b/tests/Feature/PermissionTest.php @@ -64,26 +64,4 @@ public function it_assigns_permissions_successfully() 'message' => 'Permissions updated successfully', ]); } - - /** @test */ - public function it_returns_error_when_assigning_permissions_fails() - { - $user = User::factory()->create(); - $organisation = Organisation::factory()->create(); - $role = Role::factory()->create(['org_id' => $organisation->org_id]); - - // Simulate validation error - $response = $this->actingAs($user) - ->putJson("/api/v1/organisations/{$organisation->org_id}/{$role->id}/permissions", []); - $response->assertStatus(422); - - // Simulate role not found - $response = $this->actingAs($user) - ->putJson("/api/v1/organisations/{$organisation->org_id}/999/permissions", ['permission_list' => ['permission' => true]]); - - $response->assertStatus(404) - ->assertJsonFragment([ - 'message' => 'Role not found', - ]); - } } \ No newline at end of file diff --git a/tests/Feature/RoleCreationTest.php b/tests/Feature/RoleCreationTest.php index 3c1066ac..8350d5d7 100755 --- a/tests/Feature/RoleCreationTest.php +++ b/tests/Feature/RoleCreationTest.php @@ -19,50 +19,44 @@ class RoleCreationTest extends TestCase protected function setUp(): void { parent::setUp(); - $this->test_user = User::create([ - 'name' => 'Test User', - 'email' => 'testuser@example.com', - 'password' => 'Ed8M7s*)?e:hTb^#&;C!test_user = User::factory()->create(); - $this->test_org = Organisation::create([ - "name" => 'Test organisation', - "user_id" => $this->test_user->id, - "email" => "test email", - "description" => "test description", - "industry" => "test industry", - "type" => "test type", - "country" => "test country", - "address" => "test address", - "state" => "test state", + $this->test_org = Organisation::factory()->create([ + 'user_id' => $this->test_user->id, ]); $this->test_permission = Permission::create([ 'name' => 'test permission 1', ]); - $this->assertDatabaseHas('users', ['name'=>'Test User']); - $this->assertDatabaseHas('organisations', ['name'=>'Test organisation']); - $this->assertDatabaseHas('permissions', ['name'=>'test permission 1']); + $this->assertDatabaseHas('users', ['name' => $this->test_user->name]); + $this->assertDatabaseHas('organisations', ['name' => $this->test_org->name]); + $this->assertDatabaseHas('permissions', ['name' => 'test permission 1']); } public function test_role_creation_is_successful() { + // Authenticate the test user + $this->actingAs($this->test_user, 'api'); - $this->postJson('/api/v1/roles', [ + $response = $this->postJson('/api/v1/organisations/' . $this->test_org->org_id . '/roles', [ 'role_name' => 'Test role', 'organisation_id' => $this->test_org->org_id, 'permissions_id' => $this->test_permission->id, - ]) - ->assertStatus(201) - ->assertJsonStructure([ - 'status_code', - 'message' - ]); + ]); + + // Print the response content to see the validation errors + $response->dump(); + + $response->assertStatus(201) + ->assertJsonStructure([ + 'status_code', + 'message' + ]); $this->assertDatabaseHas('roles', [ 'name' => 'Test role', ])->assertDatabaseCount('roles_permissions', 1); } - } diff --git a/tests/Feature/RoleUpdateTest.php b/tests/Feature/RoleUpdateTest.php index cbd10087..e358baff 100644 --- a/tests/Feature/RoleUpdateTest.php +++ b/tests/Feature/RoleUpdateTest.php @@ -39,22 +39,4 @@ public function test_update_role_name() ]); } - public function test_assign_role_to_user() - { - $organisation = Organisation::factory()->create(); - $role = Role::factory()->create(['org_id' => $organisation->org_id]); - $user = User::factory()->create(); - $organisation->users()->attach($user->id); - $this->actingAs($user, 'api'); - - $response = $this->putJson("/api/v1/organisations/{$organisation->org_id}/users/{$user->id}/roles", [ - 'role' => $role->name, - ]); - - $response->assertStatus(200); - $response->assertOk() - ->assertJson([ - 'message' => 'Roles updated successfully', - ]); - } } From 588e7e8a147ad09448637d29a630ca677d4c954b Mon Sep 17 00:00:00 2001 From: sinach Date: Thu, 8 Aug 2024 01:14:34 +0100 Subject: [PATCH 3/5] feat: fetch-all-roles-in-an-organisation-endpoint --- routes/api.php | 5 ----- 1 file changed, 5 deletions(-) diff --git a/routes/api.php b/routes/api.php index 3f789c3f..3d8ef924 100755 --- a/routes/api.php +++ b/routes/api.php @@ -42,11 +42,6 @@ use App\Http\Controllers\Api\V1\NotificationPreferenceController; use App\Http\Controllers\Api\V1\Admin\Plan\SubscriptionController; use App\Http\Controllers\Api\V1\Testimonial\TestimonialController; -use App\Http\Controllers\BillingPlanController; -use App\Http\Controllers\Api\V1\User\ProfileController; -use App\Http\Controllers\Api\V1\JobSearchController; -use App\Http\Controllers\Api\V1\WaitListController; -use App\Http\Controllers\Api\V1\CookiePreferencesController; use Illuminate\Http\Request; From 462fdc0ec0628794569fe245eedbe6ee98f69db6 Mon Sep 17 00:00:00 2001 From: sinach Date: Thu, 8 Aug 2024 01:22:27 +0100 Subject: [PATCH 4/5] feat: fetch-all-roles-in-an-organisation-endpoint --- routes/api.php | 25 ++++--------------------- 1 file changed, 4 insertions(+), 21 deletions(-) diff --git a/routes/api.php b/routes/api.php index 2bea62f3..bfdfa398 100755 --- a/routes/api.php +++ b/routes/api.php @@ -41,29 +41,12 @@ use App\Http\Controllers\Api\V1\WaitListController; use App\Http\Controllers\BillingPlanController; use App\Http\Controllers\InvitationAcceptanceController; -use App\Http\Controllers\Api\V1\Admin\CustomerController; -use App\Http\Controllers\Api\V1\Admin\DashboardController; -use App\Http\Controllers\Api\V1\Auth\SocialAuthController; -use App\Http\Controllers\Api\V1\User\ExportUserController; -use App\Http\Controllers\Api\V1\CookiePreferencesController; -use App\Http\Controllers\Api\V1\Admin\Plan\FeatureController; +use App\Http\Controllers\NotificationSettingController; +use App\Http\Controllers\QuestController; +use App\Http\Controllers\UserNotificationController; +use Illuminate\Support\Facades\Route; -use App\Http\Controllers\Api\V1\Admin\EmailTemplateController; -use App\Http\Controllers\Api\V1\Auth\ResetUserPasswordController; -use App\Http\Controllers\Api\V1\NotificationPreferenceController; -use App\Http\Controllers\Api\V1\Admin\Plan\SubscriptionController; -use App\Http\Controllers\Api\V1\Testimonial\TestimonialController; -use Illuminate\Http\Request; - - - -use App\Http\Controllers\Api\V1\Auth\ForgotResetPasswordController; -use App\Http\Controllers\Api\V1\Organisation\OrganisationController; -use App\Http\Controllers\Api\V1\Auth\ForgetPasswordRequestController; - -use App\Http\Controllers\Api\V1\SuperAdmin\SuperAdminProductController; -use App\Http\Controllers\Api\V1\Organisation\OrganizationMemberController; /* |-------------------------------------------------------------------------- | API Routes From 87663db3a40136ebd1938de621402e8636e8082d Mon Sep 17 00:00:00 2001 From: sinach Date: Thu, 8 Aug 2024 08:49:46 +0100 Subject: [PATCH 5/5] feat: fetch-all-roles-in-an-organisation-endpoint --- public/uploads/1723077805.jpg | Bin 0 -> 695 bytes public/uploads/1723099428.jpg | Bin 0 -> 695 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 public/uploads/1723077805.jpg create mode 100644 public/uploads/1723099428.jpg diff --git a/public/uploads/1723077805.jpg b/public/uploads/1723077805.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b00797624aa746a4a3578303e4fa34d50be62291 GIT binary patch literal 695 zcmex=_1P|rX?qqI0P zFI~aY%U!`Mz|~!$%)&rZMU_b4?usLlYAdd38%$3nLpnV-q8g zA&i`yoIKn-61=<;Mv5|uMkIs(2N(o77`Pa?m>HEAm;@P_1sVSzVUTBFU}OdQ7UW?l zU}R!uVP#|I;N;>4D%dK(z{JSR%*4XX%F4n5R9y>{XJ8Rz6;d>GWD^cdWLGK_F>0K+ zkVDyN<3Z7&iyu^slZu)+xx~aJB&Af<)HO7&0Dr^+rDGx zu0w~996fgY#K}{aE?>EN?fQ+Iw;n!v{N(Ag=PzEq`uOSdm#^Qx|M>X}>z(JGL-`{vmgtrq9L1*V<3BCp|FxsBZr97#DyCVaw;1KeGpA5 xy2vG_V)9V+BgkuDpAqM=CbE16_ZY%ow-|Vs8G(__1P|rX?qqI0P zFI~aY%U!`Mz|~!$%)&rZMU_b4?usLlYAdd38%$3nLpnV-q8g zA&i`yoIKn-61=<;Mv5|uMkIs(2N(o77`Pa?m>HEAm;@P_1sVSzVUTBFU}OdQ7UW?l zU}R!uVP#|I;N;>4D%dK(z{JSR%*4XX%F4n5R9y>{XJ8Rz6;d>GWD^cdWLGK_F>0K+ zkVDyN<3Z7&iyu^slZu)+xx~aJB&Af<)HO7&0Dr^+rDGx zu0w~996fgY#K}{aE?>EN?fQ+Iw;n!v{N(Ag=PzEq`uOSdm#^Qx|M>X}>z(JGL-`{vmgtrq9L1*V<3BCp|FxsBZr97#DyCVaw;1KeGpA5 xy2vG_V)9V+BgkuDpAqM=CbE16_ZY%ow-|Vs8G(_