├── .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! = auth()->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 |
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 | = $e->getMessage() ?>
4 |
5 | = $e->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 |
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 |
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 |
--------------------------------------------------------------------------------