├── .gitignore ├── resources ├── views │ ├── errors │ │ ├── 404.php │ │ └── 500.php │ ├── home.php │ ├── lune │ │ └── debug.php │ ├── welcome.php │ ├── auth │ │ ├── login.php │ │ └── register.php │ └── layouts │ │ ├── error.php │ │ └── main.php └── templates │ ├── model.php │ ├── controller.php │ └── migration.php ├── config ├── auth.php ├── hashing.php ├── storage.php ├── session.php ├── view.php ├── app.php ├── database.php └── providers.php ├── routes ├── api.php └── web.php ├── lune.php ├── README.md ├── public └── index.php ├── .env.example ├── app ├── Providers │ ├── AppServiceProvider.php │ ├── RuleServiceProvider.php │ └── RouteServiceProvider.php ├── Models │ └── User.php ├── Middlewares │ └── AuthMiddleware.php └── Controllers │ ├── HomeController.php │ └── Auth │ ├── LoginController.php │ └── RegisterController.php ├── composer.json ├── database └── migrations │ └── 2022_04_01_000000_create_users_table.php └── composer.lock /.gitignore: -------------------------------------------------------------------------------- 1 | .env 2 | /vendor 3 | -------------------------------------------------------------------------------- /resources/views/errors/404.php: -------------------------------------------------------------------------------- 1 |

Not Found

2 | -------------------------------------------------------------------------------- /resources/views/home.php: -------------------------------------------------------------------------------- 1 |

You are logged in! email ?>

2 | -------------------------------------------------------------------------------- /config/auth.php: -------------------------------------------------------------------------------- 1 | 'session', 5 | ]; 6 | -------------------------------------------------------------------------------- /config/hashing.php: -------------------------------------------------------------------------------- 1 | 'bcrypt' 5 | ]; 6 | -------------------------------------------------------------------------------- /config/storage.php: -------------------------------------------------------------------------------- 1 | env('FILE_STORAGE', 'disk'), 5 | ]; 6 | -------------------------------------------------------------------------------- /config/session.php: -------------------------------------------------------------------------------- 1 | env('SESSOIN_STORAGE', 'native'), 5 | ]; 6 | -------------------------------------------------------------------------------- /resources/views/lune/debug.php: -------------------------------------------------------------------------------- 1 |
2 | 
3 | 
4 | -------------------------------------------------------------------------------- /routes/api.php: -------------------------------------------------------------------------------- 1 | json(["message" => "Lune API"])); 6 | -------------------------------------------------------------------------------- /config/view.php: -------------------------------------------------------------------------------- 1 | "lune", 5 | "path" => resourcesDirectory() . "/views", 6 | ]; 7 | -------------------------------------------------------------------------------- /resources/views/welcome.php: -------------------------------------------------------------------------------- 1 |

Lune App

2 |

3 | 4 | http:// 5 | 6 |

7 | -------------------------------------------------------------------------------- /config/app.php: -------------------------------------------------------------------------------- 1 | env('APP_NAME', 'Lune'), 5 | 'env' => env('APP_ENV', 'dev'), 6 | 'url' => env('APP_URL', 'localhost:8080'), 7 | ]; 8 | -------------------------------------------------------------------------------- /lune.php: -------------------------------------------------------------------------------- 1 | run(); 9 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Lune 2 | 3 | Simple PHP framework inspired by Laravel. 4 | 5 | Core source code: [https://github.com/antoniosarosi/lune-framework](https://github.com/antoniosarosi/lune-framework) 6 | -------------------------------------------------------------------------------- /resources/templates/model.php: -------------------------------------------------------------------------------- 1 | run(); 9 | -------------------------------------------------------------------------------- /resources/templates/controller.php: -------------------------------------------------------------------------------- 1 | env("dev")): ?> 2 |
 3 | getMessage() ?>
 4 | 
5 | getTraceAsString() ?> 6 |
7 | 8 | HTTP 500 INTERNAL SERVER ERROR 9 | 10 | -------------------------------------------------------------------------------- /routes/web.php: -------------------------------------------------------------------------------- 1 | view("welcome")); 10 | 11 | Route::get("/home", [HomeController::class, "show"]); 12 | -------------------------------------------------------------------------------- /.env.example: -------------------------------------------------------------------------------- 1 | APP_NAME=Lune 2 | APP_ENV=dev 3 | APP_URL=localhost:8080 4 | 5 | DB_CONNECTION=mysql 6 | DB_HOST=127.0.0.1 7 | DB_PORT=3306 8 | DB_DATABASE=lune 9 | DB_USERNAME=root 10 | DB_PASSWORD= 11 | 12 | SESSION_STORAGE=native 13 | 14 | FILE_STORAGE=disk 15 | -------------------------------------------------------------------------------- /app/Providers/AppServiceProvider.php: -------------------------------------------------------------------------------- 1 | env('DB_CONNECTION', 'mysql'), 5 | 'host' => env('DB_HOST', 'localhost'), 6 | 'port' => env('DB_PORT', 3306), 7 | 'database' => env('DB_DATABASE', 'lune'), 8 | 'username' => env('DB_USERNAME', 'root'), 9 | 'password' => env('DB_PASSWORD', ''), 10 | ]; 11 | -------------------------------------------------------------------------------- /app/Providers/RuleServiceProvider.php: -------------------------------------------------------------------------------- 1 | middlewares([AuthMiddleware::class]); 14 | } 15 | 16 | /** 17 | * Home page. 18 | */ 19 | public function show() { 20 | return view("home"); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /resources/views/auth/login.php: -------------------------------------------------------------------------------- 1 |

Login

2 |
3 |
4 | 5 | 6 |
7 |
8 |
9 | 10 | 11 |
12 |
13 | 14 |
15 | -------------------------------------------------------------------------------- /database/migrations/2022_04_01_000000_create_users_table.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 10 | 11 | 17 | 18 | 19 | 20 | 21 | 22 | Error 23 | 24 | 25 | 26 | @content 27 | 28 | 29 | -------------------------------------------------------------------------------- /resources/views/auth/register.php: -------------------------------------------------------------------------------- 1 |

Register

2 |
3 |
4 | 5 | 6 |
7 |
8 |
9 | 10 | 11 |
12 |
13 |
14 | 15 | 16 |
17 |
18 |
19 | 20 | 21 |
22 |
23 | 24 |
25 | -------------------------------------------------------------------------------- /app/Controllers/Auth/LoginController.php: -------------------------------------------------------------------------------- 1 | validate([ 25 | "email" => "email", 26 | "password" => "required", 27 | ]); 28 | 29 | $user = User::firstWhere("email", $data["email"]); 30 | 31 | if (is_null($user) || !$hasher->verify($data["password"], $user->password)) { 32 | return back()->withErrors(["email" => ["Credentials do not match"]]); 33 | } 34 | 35 | $user->login(); 36 | 37 | return redirect("/home"); 38 | } 39 | 40 | /** 41 | * Logout. 42 | */ 43 | public function destroy() { 44 | auth()?->logout(); 45 | 46 | return redirect("/"); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /app/Controllers/Auth/RegisterController.php: -------------------------------------------------------------------------------- 1 | validate([ 26 | "name" => "required", 27 | "email" => "email", 28 | "password" => "required", 29 | "confirmPassword" => "required", 30 | ]); 31 | 32 | if ($data["confirmPassword"] !== $data["password"]) { 33 | return back()->withErrors(["confirmPassword" => ["Passwords do not match"]]); 34 | } 35 | 36 | $data["password"] = $hasher->hash($data["password"]); 37 | 38 | $user = User::create($data); 39 | 40 | $user->login(); 41 | 42 | return redirect("/home"); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /config/providers.php: -------------------------------------------------------------------------------- 1 | [ 12 | /** 13 | * Lune service providers 14 | */ 15 | Lune\Providers\DatabaseDriverServiceProvider::class, 16 | Lune\Providers\FileStorageDriverServiceProvider::class, 17 | Lune\Providers\SessionStorageServiceProvider::class, 18 | Lune\Providers\ViewServiceProvider::class, 19 | Lune\Providers\AuthenticatorServiceProvider::class, 20 | Lune\Providers\ServerDataServiceProvider::class, 21 | Lune\Providers\HasherServiceProvider::class, 22 | 23 | /** 24 | * Package service providers 25 | */ 26 | ], 27 | 28 | /** 29 | * Service providers that should be executed once the app is running. 30 | */ 31 | 'runtime' => [ 32 | App\Providers\RouteServiceProvider::class, 33 | App\Providers\RuleServiceProvider::class, 34 | 35 | /** 36 | * Custom service providers 37 | */ 38 | App\Providers\AppServiceProvider::class, 39 | 40 | ], 41 | ]; 42 | -------------------------------------------------------------------------------- /resources/views/layouts/main.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 10 | 11 | 17 | 18 | 19 | 20 | 21 | 22 | Home 23 | 24 | 25 | 26 | 61 | 62 |
63 | @content 64 |
65 | 66 | 67 | 68 | -------------------------------------------------------------------------------- /composer.lock: -------------------------------------------------------------------------------- 1 | { 2 | "_readme": [ 3 | "This file locks the dependencies of your project to a known state", 4 | "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", 5 | "This file is @generated automatically" 6 | ], 7 | "content-hash": "403c979b7d3a8dce4b84a762b878c573", 8 | "packages": [ 9 | { 10 | "name": "antoniosarosi/lune-framework", 11 | "version": "v0.1.0", 12 | "source": { 13 | "type": "git", 14 | "url": "https://github.com/antoniosarosi/lune-framework.git", 15 | "reference": "15ad4f0117925e7953ca673ff8b42c4bdf4bf503" 16 | }, 17 | "dist": { 18 | "type": "zip", 19 | "url": "https://api.github.com/repos/antoniosarosi/lune-framework/zipball/15ad4f0117925e7953ca673ff8b42c4bdf4bf503", 20 | "reference": "15ad4f0117925e7953ca673ff8b42c4bdf4bf503", 21 | "shasum": "" 22 | }, 23 | "require": { 24 | "symfony/console": "^6.0", 25 | "vlucas/phpdotenv": "^5.4" 26 | }, 27 | "require-dev": { 28 | "friendsofphp/php-cs-fixer": "^3.8", 29 | "phpunit/phpunit": "^9.5" 30 | }, 31 | "type": "library", 32 | "autoload": { 33 | "files": [ 34 | "./src/Lune/Helpers/app.php", 35 | "./src/Lune/Helpers/auth.php", 36 | "./src/Lune/Helpers/http.php", 37 | "./src/Lune/Helpers/session.php", 38 | "./src/Lune/Helpers/string.php" 39 | ], 40 | "psr-4": { 41 | "Lune\\": "./src/Lune/" 42 | } 43 | }, 44 | "notification-url": "https://packagist.org/downloads/", 45 | "license": [ 46 | "MIT" 47 | ], 48 | "authors": [ 49 | { 50 | "name": "Antonio Sarosi", 51 | "email": "sarosiantonio@gmail.com" 52 | } 53 | ], 54 | "description": "Simple PHP Framework inspired by Laravel", 55 | "support": { 56 | "issues": "https://github.com/antoniosarosi/lune-framework/issues", 57 | "source": "https://github.com/antoniosarosi/lune-framework/tree/v0.1.0" 58 | }, 59 | "time": "2022-04-11T19:36:05+00:00" 60 | }, 61 | { 62 | "name": "graham-campbell/result-type", 63 | "version": "v1.0.4", 64 | "source": { 65 | "type": "git", 66 | "url": "https://github.com/GrahamCampbell/Result-Type.git", 67 | "reference": "0690bde05318336c7221785f2a932467f98b64ca" 68 | }, 69 | "dist": { 70 | "type": "zip", 71 | "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/0690bde05318336c7221785f2a932467f98b64ca", 72 | "reference": "0690bde05318336c7221785f2a932467f98b64ca", 73 | "shasum": "" 74 | }, 75 | "require": { 76 | "php": "^7.0 || ^8.0", 77 | "phpoption/phpoption": "^1.8" 78 | }, 79 | "require-dev": { 80 | "phpunit/phpunit": "^6.5.14 || ^7.5.20 || ^8.5.19 || ^9.5.8" 81 | }, 82 | "type": "library", 83 | "autoload": { 84 | "psr-4": { 85 | "GrahamCampbell\\ResultType\\": "src/" 86 | } 87 | }, 88 | "notification-url": "https://packagist.org/downloads/", 89 | "license": [ 90 | "MIT" 91 | ], 92 | "authors": [ 93 | { 94 | "name": "Graham Campbell", 95 | "email": "hello@gjcampbell.co.uk", 96 | "homepage": "https://github.com/GrahamCampbell" 97 | } 98 | ], 99 | "description": "An Implementation Of The Result Type", 100 | "keywords": [ 101 | "Graham Campbell", 102 | "GrahamCampbell", 103 | "Result Type", 104 | "Result-Type", 105 | "result" 106 | ], 107 | "support": { 108 | "issues": "https://github.com/GrahamCampbell/Result-Type/issues", 109 | "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.0.4" 110 | }, 111 | "funding": [ 112 | { 113 | "url": "https://github.com/GrahamCampbell", 114 | "type": "github" 115 | }, 116 | { 117 | "url": "https://tidelift.com/funding/github/packagist/graham-campbell/result-type", 118 | "type": "tidelift" 119 | } 120 | ], 121 | "time": "2021-11-21T21:41:47+00:00" 122 | }, 123 | { 124 | "name": "phpoption/phpoption", 125 | "version": "1.8.1", 126 | "source": { 127 | "type": "git", 128 | "url": "https://github.com/schmittjoh/php-option.git", 129 | "reference": "eab7a0df01fe2344d172bff4cd6dbd3f8b84ad15" 130 | }, 131 | "dist": { 132 | "type": "zip", 133 | "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/eab7a0df01fe2344d172bff4cd6dbd3f8b84ad15", 134 | "reference": "eab7a0df01fe2344d172bff4cd6dbd3f8b84ad15", 135 | "shasum": "" 136 | }, 137 | "require": { 138 | "php": "^7.0 || ^8.0" 139 | }, 140 | "require-dev": { 141 | "bamarni/composer-bin-plugin": "^1.4.1", 142 | "phpunit/phpunit": "^6.5.14 || ^7.5.20 || ^8.5.19 || ^9.5.8" 143 | }, 144 | "type": "library", 145 | "extra": { 146 | "branch-alias": { 147 | "dev-master": "1.8-dev" 148 | } 149 | }, 150 | "autoload": { 151 | "psr-4": { 152 | "PhpOption\\": "src/PhpOption/" 153 | } 154 | }, 155 | "notification-url": "https://packagist.org/downloads/", 156 | "license": [ 157 | "Apache-2.0" 158 | ], 159 | "authors": [ 160 | { 161 | "name": "Johannes M. Schmitt", 162 | "email": "schmittjoh@gmail.com", 163 | "homepage": "https://github.com/schmittjoh" 164 | }, 165 | { 166 | "name": "Graham Campbell", 167 | "email": "hello@gjcampbell.co.uk", 168 | "homepage": "https://github.com/GrahamCampbell" 169 | } 170 | ], 171 | "description": "Option Type for PHP", 172 | "keywords": [ 173 | "language", 174 | "option", 175 | "php", 176 | "type" 177 | ], 178 | "support": { 179 | "issues": "https://github.com/schmittjoh/php-option/issues", 180 | "source": "https://github.com/schmittjoh/php-option/tree/1.8.1" 181 | }, 182 | "funding": [ 183 | { 184 | "url": "https://github.com/GrahamCampbell", 185 | "type": "github" 186 | }, 187 | { 188 | "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption", 189 | "type": "tidelift" 190 | } 191 | ], 192 | "time": "2021-12-04T23:24:31+00:00" 193 | }, 194 | { 195 | "name": "psr/container", 196 | "version": "2.0.2", 197 | "source": { 198 | "type": "git", 199 | "url": "https://github.com/php-fig/container.git", 200 | "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" 201 | }, 202 | "dist": { 203 | "type": "zip", 204 | "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", 205 | "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", 206 | "shasum": "" 207 | }, 208 | "require": { 209 | "php": ">=7.4.0" 210 | }, 211 | "type": "library", 212 | "extra": { 213 | "branch-alias": { 214 | "dev-master": "2.0.x-dev" 215 | } 216 | }, 217 | "autoload": { 218 | "psr-4": { 219 | "Psr\\Container\\": "src/" 220 | } 221 | }, 222 | "notification-url": "https://packagist.org/downloads/", 223 | "license": [ 224 | "MIT" 225 | ], 226 | "authors": [ 227 | { 228 | "name": "PHP-FIG", 229 | "homepage": "https://www.php-fig.org/" 230 | } 231 | ], 232 | "description": "Common Container Interface (PHP FIG PSR-11)", 233 | "homepage": "https://github.com/php-fig/container", 234 | "keywords": [ 235 | "PSR-11", 236 | "container", 237 | "container-interface", 238 | "container-interop", 239 | "psr" 240 | ], 241 | "support": { 242 | "issues": "https://github.com/php-fig/container/issues", 243 | "source": "https://github.com/php-fig/container/tree/2.0.2" 244 | }, 245 | "time": "2021-11-05T16:47:00+00:00" 246 | }, 247 | { 248 | "name": "symfony/console", 249 | "version": "v6.0.7", 250 | "source": { 251 | "type": "git", 252 | "url": "https://github.com/symfony/console.git", 253 | "reference": "70dcf7b2ca2ea08ad6ebcc475f104a024fb5632e" 254 | }, 255 | "dist": { 256 | "type": "zip", 257 | "url": "https://api.github.com/repos/symfony/console/zipball/70dcf7b2ca2ea08ad6ebcc475f104a024fb5632e", 258 | "reference": "70dcf7b2ca2ea08ad6ebcc475f104a024fb5632e", 259 | "shasum": "" 260 | }, 261 | "require": { 262 | "php": ">=8.0.2", 263 | "symfony/polyfill-mbstring": "~1.0", 264 | "symfony/service-contracts": "^1.1|^2|^3", 265 | "symfony/string": "^5.4|^6.0" 266 | }, 267 | "conflict": { 268 | "symfony/dependency-injection": "<5.4", 269 | "symfony/dotenv": "<5.4", 270 | "symfony/event-dispatcher": "<5.4", 271 | "symfony/lock": "<5.4", 272 | "symfony/process": "<5.4" 273 | }, 274 | "provide": { 275 | "psr/log-implementation": "1.0|2.0|3.0" 276 | }, 277 | "require-dev": { 278 | "psr/log": "^1|^2|^3", 279 | "symfony/config": "^5.4|^6.0", 280 | "symfony/dependency-injection": "^5.4|^6.0", 281 | "symfony/event-dispatcher": "^5.4|^6.0", 282 | "symfony/lock": "^5.4|^6.0", 283 | "symfony/process": "^5.4|^6.0", 284 | "symfony/var-dumper": "^5.4|^6.0" 285 | }, 286 | "suggest": { 287 | "psr/log": "For using the console logger", 288 | "symfony/event-dispatcher": "", 289 | "symfony/lock": "", 290 | "symfony/process": "" 291 | }, 292 | "type": "library", 293 | "autoload": { 294 | "psr-4": { 295 | "Symfony\\Component\\Console\\": "" 296 | }, 297 | "exclude-from-classmap": [ 298 | "/Tests/" 299 | ] 300 | }, 301 | "notification-url": "https://packagist.org/downloads/", 302 | "license": [ 303 | "MIT" 304 | ], 305 | "authors": [ 306 | { 307 | "name": "Fabien Potencier", 308 | "email": "fabien@symfony.com" 309 | }, 310 | { 311 | "name": "Symfony Community", 312 | "homepage": "https://symfony.com/contributors" 313 | } 314 | ], 315 | "description": "Eases the creation of beautiful and testable command line interfaces", 316 | "homepage": "https://symfony.com", 317 | "keywords": [ 318 | "cli", 319 | "command line", 320 | "console", 321 | "terminal" 322 | ], 323 | "support": { 324 | "source": "https://github.com/symfony/console/tree/v6.0.7" 325 | }, 326 | "funding": [ 327 | { 328 | "url": "https://symfony.com/sponsor", 329 | "type": "custom" 330 | }, 331 | { 332 | "url": "https://github.com/fabpot", 333 | "type": "github" 334 | }, 335 | { 336 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 337 | "type": "tidelift" 338 | } 339 | ], 340 | "time": "2022-03-31T17:18:25+00:00" 341 | }, 342 | { 343 | "name": "symfony/polyfill-ctype", 344 | "version": "v1.25.0", 345 | "source": { 346 | "type": "git", 347 | "url": "https://github.com/symfony/polyfill-ctype.git", 348 | "reference": "30885182c981ab175d4d034db0f6f469898070ab" 349 | }, 350 | "dist": { 351 | "type": "zip", 352 | "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/30885182c981ab175d4d034db0f6f469898070ab", 353 | "reference": "30885182c981ab175d4d034db0f6f469898070ab", 354 | "shasum": "" 355 | }, 356 | "require": { 357 | "php": ">=7.1" 358 | }, 359 | "provide": { 360 | "ext-ctype": "*" 361 | }, 362 | "suggest": { 363 | "ext-ctype": "For best performance" 364 | }, 365 | "type": "library", 366 | "extra": { 367 | "branch-alias": { 368 | "dev-main": "1.23-dev" 369 | }, 370 | "thanks": { 371 | "name": "symfony/polyfill", 372 | "url": "https://github.com/symfony/polyfill" 373 | } 374 | }, 375 | "autoload": { 376 | "files": [ 377 | "bootstrap.php" 378 | ], 379 | "psr-4": { 380 | "Symfony\\Polyfill\\Ctype\\": "" 381 | } 382 | }, 383 | "notification-url": "https://packagist.org/downloads/", 384 | "license": [ 385 | "MIT" 386 | ], 387 | "authors": [ 388 | { 389 | "name": "Gert de Pagter", 390 | "email": "BackEndTea@gmail.com" 391 | }, 392 | { 393 | "name": "Symfony Community", 394 | "homepage": "https://symfony.com/contributors" 395 | } 396 | ], 397 | "description": "Symfony polyfill for ctype functions", 398 | "homepage": "https://symfony.com", 399 | "keywords": [ 400 | "compatibility", 401 | "ctype", 402 | "polyfill", 403 | "portable" 404 | ], 405 | "support": { 406 | "source": "https://github.com/symfony/polyfill-ctype/tree/v1.25.0" 407 | }, 408 | "funding": [ 409 | { 410 | "url": "https://symfony.com/sponsor", 411 | "type": "custom" 412 | }, 413 | { 414 | "url": "https://github.com/fabpot", 415 | "type": "github" 416 | }, 417 | { 418 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 419 | "type": "tidelift" 420 | } 421 | ], 422 | "time": "2021-10-20T20:35:02+00:00" 423 | }, 424 | { 425 | "name": "symfony/polyfill-intl-grapheme", 426 | "version": "v1.25.0", 427 | "source": { 428 | "type": "git", 429 | "url": "https://github.com/symfony/polyfill-intl-grapheme.git", 430 | "reference": "81b86b50cf841a64252b439e738e97f4a34e2783" 431 | }, 432 | "dist": { 433 | "type": "zip", 434 | "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/81b86b50cf841a64252b439e738e97f4a34e2783", 435 | "reference": "81b86b50cf841a64252b439e738e97f4a34e2783", 436 | "shasum": "" 437 | }, 438 | "require": { 439 | "php": ">=7.1" 440 | }, 441 | "suggest": { 442 | "ext-intl": "For best performance" 443 | }, 444 | "type": "library", 445 | "extra": { 446 | "branch-alias": { 447 | "dev-main": "1.23-dev" 448 | }, 449 | "thanks": { 450 | "name": "symfony/polyfill", 451 | "url": "https://github.com/symfony/polyfill" 452 | } 453 | }, 454 | "autoload": { 455 | "files": [ 456 | "bootstrap.php" 457 | ], 458 | "psr-4": { 459 | "Symfony\\Polyfill\\Intl\\Grapheme\\": "" 460 | } 461 | }, 462 | "notification-url": "https://packagist.org/downloads/", 463 | "license": [ 464 | "MIT" 465 | ], 466 | "authors": [ 467 | { 468 | "name": "Nicolas Grekas", 469 | "email": "p@tchwork.com" 470 | }, 471 | { 472 | "name": "Symfony Community", 473 | "homepage": "https://symfony.com/contributors" 474 | } 475 | ], 476 | "description": "Symfony polyfill for intl's grapheme_* functions", 477 | "homepage": "https://symfony.com", 478 | "keywords": [ 479 | "compatibility", 480 | "grapheme", 481 | "intl", 482 | "polyfill", 483 | "portable", 484 | "shim" 485 | ], 486 | "support": { 487 | "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.25.0" 488 | }, 489 | "funding": [ 490 | { 491 | "url": "https://symfony.com/sponsor", 492 | "type": "custom" 493 | }, 494 | { 495 | "url": "https://github.com/fabpot", 496 | "type": "github" 497 | }, 498 | { 499 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 500 | "type": "tidelift" 501 | } 502 | ], 503 | "time": "2021-11-23T21:10:46+00:00" 504 | }, 505 | { 506 | "name": "symfony/polyfill-intl-normalizer", 507 | "version": "v1.25.0", 508 | "source": { 509 | "type": "git", 510 | "url": "https://github.com/symfony/polyfill-intl-normalizer.git", 511 | "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8" 512 | }, 513 | "dist": { 514 | "type": "zip", 515 | "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8590a5f561694770bdcd3f9b5c69dde6945028e8", 516 | "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8", 517 | "shasum": "" 518 | }, 519 | "require": { 520 | "php": ">=7.1" 521 | }, 522 | "suggest": { 523 | "ext-intl": "For best performance" 524 | }, 525 | "type": "library", 526 | "extra": { 527 | "branch-alias": { 528 | "dev-main": "1.23-dev" 529 | }, 530 | "thanks": { 531 | "name": "symfony/polyfill", 532 | "url": "https://github.com/symfony/polyfill" 533 | } 534 | }, 535 | "autoload": { 536 | "files": [ 537 | "bootstrap.php" 538 | ], 539 | "psr-4": { 540 | "Symfony\\Polyfill\\Intl\\Normalizer\\": "" 541 | }, 542 | "classmap": [ 543 | "Resources/stubs" 544 | ] 545 | }, 546 | "notification-url": "https://packagist.org/downloads/", 547 | "license": [ 548 | "MIT" 549 | ], 550 | "authors": [ 551 | { 552 | "name": "Nicolas Grekas", 553 | "email": "p@tchwork.com" 554 | }, 555 | { 556 | "name": "Symfony Community", 557 | "homepage": "https://symfony.com/contributors" 558 | } 559 | ], 560 | "description": "Symfony polyfill for intl's Normalizer class and related functions", 561 | "homepage": "https://symfony.com", 562 | "keywords": [ 563 | "compatibility", 564 | "intl", 565 | "normalizer", 566 | "polyfill", 567 | "portable", 568 | "shim" 569 | ], 570 | "support": { 571 | "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.25.0" 572 | }, 573 | "funding": [ 574 | { 575 | "url": "https://symfony.com/sponsor", 576 | "type": "custom" 577 | }, 578 | { 579 | "url": "https://github.com/fabpot", 580 | "type": "github" 581 | }, 582 | { 583 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 584 | "type": "tidelift" 585 | } 586 | ], 587 | "time": "2021-02-19T12:13:01+00:00" 588 | }, 589 | { 590 | "name": "symfony/polyfill-mbstring", 591 | "version": "v1.25.0", 592 | "source": { 593 | "type": "git", 594 | "url": "https://github.com/symfony/polyfill-mbstring.git", 595 | "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825" 596 | }, 597 | "dist": { 598 | "type": "zip", 599 | "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/0abb51d2f102e00a4eefcf46ba7fec406d245825", 600 | "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825", 601 | "shasum": "" 602 | }, 603 | "require": { 604 | "php": ">=7.1" 605 | }, 606 | "provide": { 607 | "ext-mbstring": "*" 608 | }, 609 | "suggest": { 610 | "ext-mbstring": "For best performance" 611 | }, 612 | "type": "library", 613 | "extra": { 614 | "branch-alias": { 615 | "dev-main": "1.23-dev" 616 | }, 617 | "thanks": { 618 | "name": "symfony/polyfill", 619 | "url": "https://github.com/symfony/polyfill" 620 | } 621 | }, 622 | "autoload": { 623 | "files": [ 624 | "bootstrap.php" 625 | ], 626 | "psr-4": { 627 | "Symfony\\Polyfill\\Mbstring\\": "" 628 | } 629 | }, 630 | "notification-url": "https://packagist.org/downloads/", 631 | "license": [ 632 | "MIT" 633 | ], 634 | "authors": [ 635 | { 636 | "name": "Nicolas Grekas", 637 | "email": "p@tchwork.com" 638 | }, 639 | { 640 | "name": "Symfony Community", 641 | "homepage": "https://symfony.com/contributors" 642 | } 643 | ], 644 | "description": "Symfony polyfill for the Mbstring extension", 645 | "homepage": "https://symfony.com", 646 | "keywords": [ 647 | "compatibility", 648 | "mbstring", 649 | "polyfill", 650 | "portable", 651 | "shim" 652 | ], 653 | "support": { 654 | "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.25.0" 655 | }, 656 | "funding": [ 657 | { 658 | "url": "https://symfony.com/sponsor", 659 | "type": "custom" 660 | }, 661 | { 662 | "url": "https://github.com/fabpot", 663 | "type": "github" 664 | }, 665 | { 666 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 667 | "type": "tidelift" 668 | } 669 | ], 670 | "time": "2021-11-30T18:21:41+00:00" 671 | }, 672 | { 673 | "name": "symfony/polyfill-php80", 674 | "version": "v1.25.0", 675 | "source": { 676 | "type": "git", 677 | "url": "https://github.com/symfony/polyfill-php80.git", 678 | "reference": "4407588e0d3f1f52efb65fbe92babe41f37fe50c" 679 | }, 680 | "dist": { 681 | "type": "zip", 682 | "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/4407588e0d3f1f52efb65fbe92babe41f37fe50c", 683 | "reference": "4407588e0d3f1f52efb65fbe92babe41f37fe50c", 684 | "shasum": "" 685 | }, 686 | "require": { 687 | "php": ">=7.1" 688 | }, 689 | "type": "library", 690 | "extra": { 691 | "branch-alias": { 692 | "dev-main": "1.23-dev" 693 | }, 694 | "thanks": { 695 | "name": "symfony/polyfill", 696 | "url": "https://github.com/symfony/polyfill" 697 | } 698 | }, 699 | "autoload": { 700 | "files": [ 701 | "bootstrap.php" 702 | ], 703 | "psr-4": { 704 | "Symfony\\Polyfill\\Php80\\": "" 705 | }, 706 | "classmap": [ 707 | "Resources/stubs" 708 | ] 709 | }, 710 | "notification-url": "https://packagist.org/downloads/", 711 | "license": [ 712 | "MIT" 713 | ], 714 | "authors": [ 715 | { 716 | "name": "Ion Bazan", 717 | "email": "ion.bazan@gmail.com" 718 | }, 719 | { 720 | "name": "Nicolas Grekas", 721 | "email": "p@tchwork.com" 722 | }, 723 | { 724 | "name": "Symfony Community", 725 | "homepage": "https://symfony.com/contributors" 726 | } 727 | ], 728 | "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", 729 | "homepage": "https://symfony.com", 730 | "keywords": [ 731 | "compatibility", 732 | "polyfill", 733 | "portable", 734 | "shim" 735 | ], 736 | "support": { 737 | "source": "https://github.com/symfony/polyfill-php80/tree/v1.25.0" 738 | }, 739 | "funding": [ 740 | { 741 | "url": "https://symfony.com/sponsor", 742 | "type": "custom" 743 | }, 744 | { 745 | "url": "https://github.com/fabpot", 746 | "type": "github" 747 | }, 748 | { 749 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 750 | "type": "tidelift" 751 | } 752 | ], 753 | "time": "2022-03-04T08:16:47+00:00" 754 | }, 755 | { 756 | "name": "symfony/service-contracts", 757 | "version": "v3.0.1", 758 | "source": { 759 | "type": "git", 760 | "url": "https://github.com/symfony/service-contracts.git", 761 | "reference": "e517458f278c2131ca9f262f8fbaf01410f2c65c" 762 | }, 763 | "dist": { 764 | "type": "zip", 765 | "url": "https://api.github.com/repos/symfony/service-contracts/zipball/e517458f278c2131ca9f262f8fbaf01410f2c65c", 766 | "reference": "e517458f278c2131ca9f262f8fbaf01410f2c65c", 767 | "shasum": "" 768 | }, 769 | "require": { 770 | "php": ">=8.0.2", 771 | "psr/container": "^2.0" 772 | }, 773 | "conflict": { 774 | "ext-psr": "<1.1|>=2" 775 | }, 776 | "suggest": { 777 | "symfony/service-implementation": "" 778 | }, 779 | "type": "library", 780 | "extra": { 781 | "branch-alias": { 782 | "dev-main": "3.0-dev" 783 | }, 784 | "thanks": { 785 | "name": "symfony/contracts", 786 | "url": "https://github.com/symfony/contracts" 787 | } 788 | }, 789 | "autoload": { 790 | "psr-4": { 791 | "Symfony\\Contracts\\Service\\": "" 792 | } 793 | }, 794 | "notification-url": "https://packagist.org/downloads/", 795 | "license": [ 796 | "MIT" 797 | ], 798 | "authors": [ 799 | { 800 | "name": "Nicolas Grekas", 801 | "email": "p@tchwork.com" 802 | }, 803 | { 804 | "name": "Symfony Community", 805 | "homepage": "https://symfony.com/contributors" 806 | } 807 | ], 808 | "description": "Generic abstractions related to writing services", 809 | "homepage": "https://symfony.com", 810 | "keywords": [ 811 | "abstractions", 812 | "contracts", 813 | "decoupling", 814 | "interfaces", 815 | "interoperability", 816 | "standards" 817 | ], 818 | "support": { 819 | "source": "https://github.com/symfony/service-contracts/tree/v3.0.1" 820 | }, 821 | "funding": [ 822 | { 823 | "url": "https://symfony.com/sponsor", 824 | "type": "custom" 825 | }, 826 | { 827 | "url": "https://github.com/fabpot", 828 | "type": "github" 829 | }, 830 | { 831 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 832 | "type": "tidelift" 833 | } 834 | ], 835 | "time": "2022-03-13T20:10:05+00:00" 836 | }, 837 | { 838 | "name": "symfony/string", 839 | "version": "v6.0.3", 840 | "source": { 841 | "type": "git", 842 | "url": "https://github.com/symfony/string.git", 843 | "reference": "522144f0c4c004c80d56fa47e40e17028e2eefc2" 844 | }, 845 | "dist": { 846 | "type": "zip", 847 | "url": "https://api.github.com/repos/symfony/string/zipball/522144f0c4c004c80d56fa47e40e17028e2eefc2", 848 | "reference": "522144f0c4c004c80d56fa47e40e17028e2eefc2", 849 | "shasum": "" 850 | }, 851 | "require": { 852 | "php": ">=8.0.2", 853 | "symfony/polyfill-ctype": "~1.8", 854 | "symfony/polyfill-intl-grapheme": "~1.0", 855 | "symfony/polyfill-intl-normalizer": "~1.0", 856 | "symfony/polyfill-mbstring": "~1.0" 857 | }, 858 | "conflict": { 859 | "symfony/translation-contracts": "<2.0" 860 | }, 861 | "require-dev": { 862 | "symfony/error-handler": "^5.4|^6.0", 863 | "symfony/http-client": "^5.4|^6.0", 864 | "symfony/translation-contracts": "^2.0|^3.0", 865 | "symfony/var-exporter": "^5.4|^6.0" 866 | }, 867 | "type": "library", 868 | "autoload": { 869 | "files": [ 870 | "Resources/functions.php" 871 | ], 872 | "psr-4": { 873 | "Symfony\\Component\\String\\": "" 874 | }, 875 | "exclude-from-classmap": [ 876 | "/Tests/" 877 | ] 878 | }, 879 | "notification-url": "https://packagist.org/downloads/", 880 | "license": [ 881 | "MIT" 882 | ], 883 | "authors": [ 884 | { 885 | "name": "Nicolas Grekas", 886 | "email": "p@tchwork.com" 887 | }, 888 | { 889 | "name": "Symfony Community", 890 | "homepage": "https://symfony.com/contributors" 891 | } 892 | ], 893 | "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", 894 | "homepage": "https://symfony.com", 895 | "keywords": [ 896 | "grapheme", 897 | "i18n", 898 | "string", 899 | "unicode", 900 | "utf-8", 901 | "utf8" 902 | ], 903 | "support": { 904 | "source": "https://github.com/symfony/string/tree/v6.0.3" 905 | }, 906 | "funding": [ 907 | { 908 | "url": "https://symfony.com/sponsor", 909 | "type": "custom" 910 | }, 911 | { 912 | "url": "https://github.com/fabpot", 913 | "type": "github" 914 | }, 915 | { 916 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 917 | "type": "tidelift" 918 | } 919 | ], 920 | "time": "2022-01-02T09:55:41+00:00" 921 | }, 922 | { 923 | "name": "vlucas/phpdotenv", 924 | "version": "v5.4.1", 925 | "source": { 926 | "type": "git", 927 | "url": "https://github.com/vlucas/phpdotenv.git", 928 | "reference": "264dce589e7ce37a7ba99cb901eed8249fbec92f" 929 | }, 930 | "dist": { 931 | "type": "zip", 932 | "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/264dce589e7ce37a7ba99cb901eed8249fbec92f", 933 | "reference": "264dce589e7ce37a7ba99cb901eed8249fbec92f", 934 | "shasum": "" 935 | }, 936 | "require": { 937 | "ext-pcre": "*", 938 | "graham-campbell/result-type": "^1.0.2", 939 | "php": "^7.1.3 || ^8.0", 940 | "phpoption/phpoption": "^1.8", 941 | "symfony/polyfill-ctype": "^1.23", 942 | "symfony/polyfill-mbstring": "^1.23.1", 943 | "symfony/polyfill-php80": "^1.23.1" 944 | }, 945 | "require-dev": { 946 | "bamarni/composer-bin-plugin": "^1.4.1", 947 | "ext-filter": "*", 948 | "phpunit/phpunit": "^7.5.20 || ^8.5.21 || ^9.5.10" 949 | }, 950 | "suggest": { 951 | "ext-filter": "Required to use the boolean validator." 952 | }, 953 | "type": "library", 954 | "extra": { 955 | "branch-alias": { 956 | "dev-master": "5.4-dev" 957 | } 958 | }, 959 | "autoload": { 960 | "psr-4": { 961 | "Dotenv\\": "src/" 962 | } 963 | }, 964 | "notification-url": "https://packagist.org/downloads/", 965 | "license": [ 966 | "BSD-3-Clause" 967 | ], 968 | "authors": [ 969 | { 970 | "name": "Graham Campbell", 971 | "email": "hello@gjcampbell.co.uk", 972 | "homepage": "https://github.com/GrahamCampbell" 973 | }, 974 | { 975 | "name": "Vance Lucas", 976 | "email": "vance@vancelucas.com", 977 | "homepage": "https://github.com/vlucas" 978 | } 979 | ], 980 | "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", 981 | "keywords": [ 982 | "dotenv", 983 | "env", 984 | "environment" 985 | ], 986 | "support": { 987 | "issues": "https://github.com/vlucas/phpdotenv/issues", 988 | "source": "https://github.com/vlucas/phpdotenv/tree/v5.4.1" 989 | }, 990 | "funding": [ 991 | { 992 | "url": "https://github.com/GrahamCampbell", 993 | "type": "github" 994 | }, 995 | { 996 | "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv", 997 | "type": "tidelift" 998 | } 999 | ], 1000 | "time": "2021-12-12T23:22:04+00:00" 1001 | } 1002 | ], 1003 | "packages-dev": [], 1004 | "aliases": [], 1005 | "minimum-stability": "stable", 1006 | "stability-flags": [], 1007 | "prefer-stable": false, 1008 | "prefer-lowest": false, 1009 | "platform": [], 1010 | "platform-dev": [], 1011 | "plugin-api-version": "2.2.0" 1012 | } 1013 | --------------------------------------------------------------------------------