diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 000000000..1671c9b9d
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,18 @@
+root = true
+
+[*]
+charset = utf-8
+end_of_line = lf
+insert_final_newline = true
+indent_style = space
+indent_size = 4
+trim_trailing_whitespace = true
+
+[*.md]
+trim_trailing_whitespace = false
+
+[*.{yml,yaml}]
+indent_size = 2
+
+[docker-compose.yml]
+indent_size = 4
diff --git a/.env.example b/.env.example
new file mode 100644
index 000000000..6568051dd
--- /dev/null
+++ b/.env.example
@@ -0,0 +1,52 @@
+APP_NAME=Laravel
+APP_ENV=local
+APP_KEY=base64:L6PAHoxNHdtDC+F5UPWmsGvgaSWtxAz9zOxdVTDyQF4=
+APP_DEBUG=true
+APP_URL=http://localhost
+
+LOG_CHANNEL=stack
+LOG_DEPRECATIONS_CHANNEL=null
+LOG_LEVEL=debug
+
+DB_CONNECTION=mysql
+DB_HOST=mysql
+DB_PORT=3306
+DB_DATABASE=coderockr
+DB_USERNAME=root
+DB_PASSWORD=root
+
+BROADCAST_DRIVER=log
+CACHE_DRIVER=file
+FILESYSTEM_DRIVER=local
+QUEUE_CONNECTION=sync
+SESSION_DRIVER=file
+SESSION_LIFETIME=120
+
+MEMCACHED_HOST=127.0.0.1
+
+REDIS_HOST=127.0.0.1
+REDIS_PASSWORD=null
+REDIS_PORT=6379
+
+MAIL_MAILER=smtp
+MAIL_HOST=mailhog
+MAIL_PORT=1025
+MAIL_USERNAME=null
+MAIL_PASSWORD=null
+MAIL_ENCRYPTION=null
+MAIL_FROM_ADDRESS=null
+MAIL_FROM_NAME="${APP_NAME}"
+
+AWS_ACCESS_KEY_ID=
+AWS_SECRET_ACCESS_KEY=
+AWS_DEFAULT_REGION=us-east-1
+AWS_BUCKET=
+AWS_USE_PATH_STYLE_ENDPOINT=false
+
+PUSHER_APP_ID=
+PUSHER_APP_KEY=
+PUSHER_APP_SECRET=
+PUSHER_APP_CLUSTER=mt1
+
+MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
+MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 000000000..510d9961f
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,10 @@
+* text=auto
+
+*.blade.php diff=html
+*.css diff=css
+*.html diff=html
+*.md diff=markdown
+*.php diff=php
+
+/.github export-ignore
+CHANGELOG.md export-ignore
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 000000000..eb003b01a
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,15 @@
+/node_modules
+/public/hot
+/public/storage
+/storage/*.key
+/vendor
+.env
+.env.backup
+.phpunit.result.cache
+docker-compose.override.yml
+Homestead.json
+Homestead.yaml
+npm-debug.log
+yarn-error.log
+/.idea
+/.vscode
diff --git a/.scribe/.filehashes b/.scribe/.filehashes
new file mode 100644
index 000000000..1b536d3a2
--- /dev/null
+++ b/.scribe/.filehashes
@@ -0,0 +1,4 @@
+# GENERATED. YOU SHOULDN'T MODIFY OR DELETE THIS FILE.
+# Scribe uses this file to know when you change something manually in your docs.
+.scribe/intro.md=559263739b0e7bcb412809b578598518
+.scribe/auth.md=9bee2b1ef8a238b2e58613fa636d5f39
\ No newline at end of file
diff --git a/.scribe/auth.md b/.scribe/auth.md
new file mode 100644
index 000000000..82903629d
--- /dev/null
+++ b/.scribe/auth.md
@@ -0,0 +1,3 @@
+# Authenticating requests
+
+This API is not authenticated.
diff --git a/.scribe/endpoints.cache/00.yaml b/.scribe/endpoints.cache/00.yaml
new file mode 100644
index 000000000..cb7589d20
--- /dev/null
+++ b/.scribe/endpoints.cache/00.yaml
@@ -0,0 +1,638 @@
+## Autogenerated by Scribe. DO NOT MODIFY.
+
+name: Endpoints
+description: ''
+endpoints:
+ -
+ httpMethods:
+ - POST
+ uri: api/user
+ metadata:
+ title: 'Create a new user instance as investor.'
+ description: ''
+ authenticated: false
+ custom: []
+ headers:
+ Content-Type: application/json
+ Accept: application/json
+ urlParameters: []
+ queryParameters: []
+ bodyParameters:
+ name:
+ name: name
+ description: 'Must not be greater than 255 characters.'
+ required: true
+ example: petmeiuvlntnxybfewqjitortsmdgnhkceavcrtwlilmahlkcfhcudmxahpygmbygkshxdbbvunuqakyyzuefkjnackathnxrgtawkbkvcvlzbtwzcomtbhqukwzkkfirovcdswauehnyrwlgipykkxrxyyqcyzfbwqrvkiqqjpspzfsgungrczpgcvbiklbzdgwyaodiblnxooptiggfsxh
+ type: string
+ custom: []
+ email:
+ name: email
+ description: 'Must be a valid email address. Must not be greater than 255 characters.'
+ required: true
+ example: utsjdilzvrcnjonqtjcsbdosffbfytfmpvudhdqzushibrhrblkdcvkqompykimfslznbmoxtiyxclbvxydamxxusblzvxstziiydhygamrasejwzqpqhkttwmjlhtllcsnftbbnxcnspzskniutwqexk
+ type: string
+ custom: []
+ password:
+ name: password
+ description: 'Must be at least 8 characters.'
+ required: true
+ example: erjtgp
+ type: string
+ custom: []
+ responses: []
+ responseFields: []
+ -
+ httpMethods:
+ - POST
+ uri: api/investment
+ metadata:
+ title: 'Create a new investment with an owner, a creation date and an amount.'
+ description: ''
+ authenticated: false
+ custom: []
+ headers:
+ Content-Type: application/json
+ Accept: application/json
+ urlParameters: []
+ queryParameters: []
+ bodyParameters:
+ owner:
+ name: owner
+ description: ''
+ required: true
+ example: 18
+ type: integer
+ custom: []
+ amount:
+ name: amount
+ description: ''
+ required: true
+ example: 19960.792108681
+ type: number
+ custom: []
+ create_date:
+ name: create_date
+ description: ''
+ required: false
+ example: null
+ type: string
+ custom: []
+ responses: []
+ responseFields: []
+ -
+ httpMethods:
+ - GET
+ uri: api/investments
+ metadata:
+ title: 'List all investments'
+ description: ''
+ authenticated: false
+ custom: []
+ headers:
+ Content-Type: application/json
+ Accept: application/json
+ urlParameters: []
+ queryParameters: []
+ bodyParameters: []
+ responses:
+ -
+ status: 200
+ content: '{"data":[{"id":1,"owner":1,"amount":1000,"create date":"2022-03-10"},{"id":2,"owner":1,"amount":5000,"create date":"2012-03-10"},{"id":3,"owner":2,"amount":900,"create date":"2020-03-10"},{"id":4,"owner":2,"amount":300,"create date":"2021-05-03"},{"id":5,"owner":3,"amount":3000,"create date":"2021-01-25"},{"id":6,"owner":3,"amount":2000,"create date":"2021-06-25"},{"id":7,"owner":3,"amount":5000,"create date":"2022-01-25"},{"id":8,"owner":1,"amount":120,"create date":"2022-03-10"},{"id":9,"owner":1,"amount":120,"create date":"2022-03-10"},{"id":10,"owner":1,"amount":120,"create date":"2022-03-10"}],"links":{"first":"http:\/\/localhost\/api\/investments?page=1","last":"http:\/\/localhost\/api\/investments?page=2","prev":null,"next":"http:\/\/localhost\/api\/investments?page=2"},"meta":{"current_page":1,"from":1,"last_page":2,"links":[{"url":null,"label":"« Previous","active":false},{"url":"http:\/\/localhost\/api\/investments?page=1","label":"1","active":true},{"url":"http:\/\/localhost\/api\/investments?page=2","label":"2","active":false},{"url":"http:\/\/localhost\/api\/investments?page=2","label":"Next »","active":false}],"path":"http:\/\/localhost\/api\/investments","per_page":10,"to":10,"total":19}}'
+ headers:
+ cache-control: 'no-cache, private'
+ content-type: application/json
+ x-ratelimit-limit: '60'
+ x-ratelimit-remaining: '55'
+ access-control-allow-origin: '*'
+ description: null
+ responseFields: []
+ -
+ httpMethods:
+ - GET
+ uri: 'api/investment/{id}'
+ metadata:
+ title: 'View of an investment with its initial amount and expected balance.'
+ description: ''
+ authenticated: false
+ custom: []
+ headers:
+ Content-Type: application/json
+ Accept: application/json
+ urlParameters:
+ id:
+ name: id
+ description: 'The ID of the investment.'
+ required: true
+ example: 6
+ type: integer
+ custom: []
+ queryParameters: []
+ bodyParameters: []
+ responses:
+ -
+ status: 200
+ content: '{"id":6,"owner":3,"amount":2000,"expected balance":2084.73,"create date":"2021-06-25"}'
+ headers:
+ cache-control: 'no-cache, private'
+ content-type: application/json
+ x-ratelimit-limit: '60'
+ x-ratelimit-remaining: '54'
+ access-control-allow-origin: '*'
+ description: null
+ responseFields: []
+ -
+ httpMethods:
+ - GET
+ uri: 'api/withdrawal/{id}'
+ metadata:
+ title: 'Calculate the value withdrawal of a investment.'
+ description: ''
+ authenticated: false
+ custom: []
+ headers:
+ Content-Type: application/json
+ Accept: application/json
+ urlParameters:
+ id:
+ name: id
+ description: 'The ID of the withdrawal.'
+ required: true
+ example: aut
+ type: string
+ custom: []
+ queryParameters: []
+ bodyParameters: []
+ responses:
+ -
+ status: 404
+ content: |-
+ {
+ "message": "No query results for model [App\\Models\\Investment] aut",
+ "exception": "Symfony\\Component\\HttpKernel\\Exception\\NotFoundHttpException",
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php",
+ "line": 385,
+ "trace": [
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php",
+ "line": 332,
+ "function": "prepareException",
+ "class": "Illuminate\\Foundation\\Exceptions\\Handler",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/nunomaduro/collision/src/Adapters/Laravel/ExceptionHandler.php",
+ "line": 54,
+ "function": "render",
+ "class": "Illuminate\\Foundation\\Exceptions\\Handler",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php",
+ "line": 51,
+ "function": "render",
+ "class": "NunoMaduro\\Collision\\Adapters\\Laravel\\ExceptionHandler",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
+ "line": 130,
+ "function": "handleException",
+ "class": "Illuminate\\Routing\\Pipeline",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php",
+ "line": 50,
+ "function": "Illuminate\\Pipeline\\{closure}",
+ "class": "Illuminate\\Pipeline\\Pipeline",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
+ "line": 167,
+ "function": "handle",
+ "class": "Illuminate\\Routing\\Middleware\\SubstituteBindings",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php",
+ "line": 127,
+ "function": "Illuminate\\Pipeline\\{closure}",
+ "class": "Illuminate\\Pipeline\\Pipeline",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php",
+ "line": 103,
+ "function": "handleRequest",
+ "class": "Illuminate\\Routing\\Middleware\\ThrottleRequests",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php",
+ "line": 55,
+ "function": "handleRequestUsingNamedLimiter",
+ "class": "Illuminate\\Routing\\Middleware\\ThrottleRequests",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
+ "line": 167,
+ "function": "handle",
+ "class": "Illuminate\\Routing\\Middleware\\ThrottleRequests",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
+ "line": 103,
+ "function": "Illuminate\\Pipeline\\{closure}",
+ "class": "Illuminate\\Pipeline\\Pipeline",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
+ "line": 723,
+ "function": "then",
+ "class": "Illuminate\\Pipeline\\Pipeline",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
+ "line": 698,
+ "function": "runRouteWithinStack",
+ "class": "Illuminate\\Routing\\Router",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
+ "line": 662,
+ "function": "runRoute",
+ "class": "Illuminate\\Routing\\Router",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
+ "line": 651,
+ "function": "dispatchToRoute",
+ "class": "Illuminate\\Routing\\Router",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
+ "line": 167,
+ "function": "dispatch",
+ "class": "Illuminate\\Routing\\Router",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
+ "line": 128,
+ "function": "Illuminate\\Foundation\\Http\\{closure}",
+ "class": "Illuminate\\Foundation\\Http\\Kernel",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
+ "line": 21,
+ "function": "Illuminate\\Pipeline\\{closure}",
+ "class": "Illuminate\\Pipeline\\Pipeline",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php",
+ "line": 31,
+ "function": "handle",
+ "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
+ "line": 167,
+ "function": "handle",
+ "class": "Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
+ "line": 21,
+ "function": "Illuminate\\Pipeline\\{closure}",
+ "class": "Illuminate\\Pipeline\\Pipeline",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php",
+ "line": 40,
+ "function": "handle",
+ "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
+ "line": 167,
+ "function": "handle",
+ "class": "Illuminate\\Foundation\\Http\\Middleware\\TrimStrings",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php",
+ "line": 27,
+ "function": "Illuminate\\Pipeline\\{closure}",
+ "class": "Illuminate\\Pipeline\\Pipeline",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
+ "line": 167,
+ "function": "handle",
+ "class": "Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php",
+ "line": 86,
+ "function": "Illuminate\\Pipeline\\{closure}",
+ "class": "Illuminate\\Pipeline\\Pipeline",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
+ "line": 167,
+ "function": "handle",
+ "class": "Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/fruitcake/laravel-cors/src/HandleCors.php",
+ "line": 52,
+ "function": "Illuminate\\Pipeline\\{closure}",
+ "class": "Illuminate\\Pipeline\\Pipeline",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
+ "line": 167,
+ "function": "handle",
+ "class": "Fruitcake\\Cors\\HandleCors",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php",
+ "line": 39,
+ "function": "Illuminate\\Pipeline\\{closure}",
+ "class": "Illuminate\\Pipeline\\Pipeline",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
+ "line": 167,
+ "function": "handle",
+ "class": "Illuminate\\Http\\Middleware\\TrustProxies",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
+ "line": 103,
+ "function": "Illuminate\\Pipeline\\{closure}",
+ "class": "Illuminate\\Pipeline\\Pipeline",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
+ "line": 142,
+ "function": "then",
+ "class": "Illuminate\\Pipeline\\Pipeline",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
+ "line": 111,
+ "function": "sendRequestThroughRouter",
+ "class": "Illuminate\\Foundation\\Http\\Kernel",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
+ "line": 299,
+ "function": "handle",
+ "class": "Illuminate\\Foundation\\Http\\Kernel",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
+ "line": 287,
+ "function": "callLaravelOrLumenRoute",
+ "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
+ "line": 89,
+ "function": "makeApiCall",
+ "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
+ "line": 45,
+ "function": "makeResponseCall",
+ "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
+ "line": 35,
+ "function": "makeResponseCallIfConditionsPass",
+ "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
+ "line": 222,
+ "function": "__invoke",
+ "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
+ "line": 179,
+ "function": "iterateThroughStrategies",
+ "class": "Knuckles\\Scribe\\Extracting\\Extractor",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
+ "line": 116,
+ "function": "fetchResponses",
+ "class": "Knuckles\\Scribe\\Extracting\\Extractor",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
+ "line": 117,
+ "function": "processRoute",
+ "class": "Knuckles\\Scribe\\Extracting\\Extractor",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
+ "line": 75,
+ "function": "extractEndpointsInfoFromLaravelApp",
+ "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
+ "line": 51,
+ "function": "extractEndpointsInfoAndWriteToDisk",
+ "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/knuckleswtf/scribe/src/Commands/GenerateDocumentation.php",
+ "line": 49,
+ "function": "get",
+ "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
+ "line": 36,
+ "function": "handle",
+ "class": "Knuckles\\Scribe\\Commands\\GenerateDocumentation",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Container/Util.php",
+ "line": 40,
+ "function": "Illuminate\\Container\\{closure}",
+ "class": "Illuminate\\Container\\BoundMethod",
+ "type": "::"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
+ "line": 93,
+ "function": "unwrapIfClosure",
+ "class": "Illuminate\\Container\\Util",
+ "type": "::"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
+ "line": 37,
+ "function": "callBoundMethod",
+ "class": "Illuminate\\Container\\BoundMethod",
+ "type": "::"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Container/Container.php",
+ "line": 653,
+ "function": "call",
+ "class": "Illuminate\\Container\\BoundMethod",
+ "type": "::"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Console/Command.php",
+ "line": 136,
+ "function": "call",
+ "class": "Illuminate\\Container\\Container",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/symfony/console/Command/Command.php",
+ "line": 298,
+ "function": "execute",
+ "class": "Illuminate\\Console\\Command",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Console/Command.php",
+ "line": 121,
+ "function": "run",
+ "class": "Symfony\\Component\\Console\\Command\\Command",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/symfony/console/Application.php",
+ "line": 1015,
+ "function": "run",
+ "class": "Illuminate\\Console\\Command",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/symfony/console/Application.php",
+ "line": 299,
+ "function": "doRunCommand",
+ "class": "Symfony\\Component\\Console\\Application",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/symfony/console/Application.php",
+ "line": 171,
+ "function": "doRun",
+ "class": "Symfony\\Component\\Console\\Application",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Console/Application.php",
+ "line": 94,
+ "function": "run",
+ "class": "Symfony\\Component\\Console\\Application",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php",
+ "line": 129,
+ "function": "run",
+ "class": "Illuminate\\Console\\Application",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/artisan",
+ "line": 37,
+ "function": "handle",
+ "class": "Illuminate\\Foundation\\Console\\Kernel",
+ "type": "->"
+ }
+ ]
+ }
+ headers:
+ cache-control: 'no-cache, private'
+ content-type: application/json
+ x-ratelimit-limit: '60'
+ x-ratelimit-remaining: '53'
+ access-control-allow-origin: '*'
+ description: null
+ responseFields: []
+ -
+ httpMethods:
+ - GET
+ uri: 'api/list/investments/{owner}'
+ metadata:
+ title: 'List all person''s investments'
+ description: ''
+ authenticated: false
+ custom: []
+ headers:
+ Content-Type: application/json
+ Accept: application/json
+ urlParameters:
+ owner:
+ name: owner
+ description: ''
+ required: true
+ example: 11
+ type: integer
+ custom: []
+ queryParameters: []
+ bodyParameters: []
+ responses:
+ -
+ status: 200
+ content: '{"data":[],"links":{"first":"http:\/\/localhost\/api\/list\/investments\/11?page=1","last":"http:\/\/localhost\/api\/list\/investments\/11?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":null,"last_page":1,"links":[{"url":null,"label":"« Previous","active":false},{"url":"http:\/\/localhost\/api\/list\/investments\/11?page=1","label":"1","active":true},{"url":null,"label":"Next »","active":false}],"path":"http:\/\/localhost\/api\/list\/investments\/11","per_page":10,"to":null,"total":0}}'
+ headers:
+ cache-control: 'no-cache, private'
+ content-type: application/json
+ x-ratelimit-limit: '60'
+ x-ratelimit-remaining: '52'
+ access-control-allow-origin: '*'
+ description: null
+ responseFields: []
diff --git a/.scribe/endpoints/00.yaml b/.scribe/endpoints/00.yaml
new file mode 100644
index 000000000..253668098
--- /dev/null
+++ b/.scribe/endpoints/00.yaml
@@ -0,0 +1,636 @@
+name: Endpoints
+description: ''
+endpoints:
+ -
+ httpMethods:
+ - POST
+ uri: api/user
+ metadata:
+ title: 'Create a new user instance as investor.'
+ description: ''
+ authenticated: false
+ custom: []
+ headers:
+ Content-Type: application/json
+ Accept: application/json
+ urlParameters: []
+ queryParameters: []
+ bodyParameters:
+ name:
+ name: name
+ description: 'Must not be greater than 255 characters.'
+ required: true
+ example: petmeiuvlntnxybfewqjitortsmdgnhkceavcrtwlilmahlkcfhcudmxahpygmbygkshxdbbvunuqakyyzuefkjnackathnxrgtawkbkvcvlzbtwzcomtbhqukwzkkfirovcdswauehnyrwlgipykkxrxyyqcyzfbwqrvkiqqjpspzfsgungrczpgcvbiklbzdgwyaodiblnxooptiggfsxh
+ type: string
+ custom: []
+ email:
+ name: email
+ description: 'Must be a valid email address. Must not be greater than 255 characters.'
+ required: true
+ example: utsjdilzvrcnjonqtjcsbdosffbfytfmpvudhdqzushibrhrblkdcvkqompykimfslznbmoxtiyxclbvxydamxxusblzvxstziiydhygamrasejwzqpqhkttwmjlhtllcsnftbbnxcnspzskniutwqexk
+ type: string
+ custom: []
+ password:
+ name: password
+ description: 'Must be at least 8 characters.'
+ required: true
+ example: erjtgp
+ type: string
+ custom: []
+ responses: []
+ responseFields: []
+ -
+ httpMethods:
+ - POST
+ uri: api/investment
+ metadata:
+ title: 'Create a new investment with an owner, a creation date and an amount.'
+ description: ''
+ authenticated: false
+ custom: []
+ headers:
+ Content-Type: application/json
+ Accept: application/json
+ urlParameters: []
+ queryParameters: []
+ bodyParameters:
+ owner:
+ name: owner
+ description: ''
+ required: true
+ example: 18
+ type: integer
+ custom: []
+ amount:
+ name: amount
+ description: ''
+ required: true
+ example: 19960.792108681
+ type: number
+ custom: []
+ create_date:
+ name: create_date
+ description: ''
+ required: false
+ example: null
+ type: string
+ custom: []
+ responses: []
+ responseFields: []
+ -
+ httpMethods:
+ - GET
+ uri: api/investments
+ metadata:
+ title: 'List all investments'
+ description: ''
+ authenticated: false
+ custom: []
+ headers:
+ Content-Type: application/json
+ Accept: application/json
+ urlParameters: []
+ queryParameters: []
+ bodyParameters: []
+ responses:
+ -
+ status: 200
+ content: '{"data":[{"id":1,"owner":1,"amount":1000,"create date":"2022-03-10"},{"id":2,"owner":1,"amount":5000,"create date":"2012-03-10"},{"id":3,"owner":2,"amount":900,"create date":"2020-03-10"},{"id":4,"owner":2,"amount":300,"create date":"2021-05-03"},{"id":5,"owner":3,"amount":3000,"create date":"2021-01-25"},{"id":6,"owner":3,"amount":2000,"create date":"2021-06-25"},{"id":7,"owner":3,"amount":5000,"create date":"2022-01-25"},{"id":8,"owner":1,"amount":120,"create date":"2022-03-10"},{"id":9,"owner":1,"amount":120,"create date":"2022-03-10"},{"id":10,"owner":1,"amount":120,"create date":"2022-03-10"}],"links":{"first":"http:\/\/localhost\/api\/investments?page=1","last":"http:\/\/localhost\/api\/investments?page=2","prev":null,"next":"http:\/\/localhost\/api\/investments?page=2"},"meta":{"current_page":1,"from":1,"last_page":2,"links":[{"url":null,"label":"« Previous","active":false},{"url":"http:\/\/localhost\/api\/investments?page=1","label":"1","active":true},{"url":"http:\/\/localhost\/api\/investments?page=2","label":"2","active":false},{"url":"http:\/\/localhost\/api\/investments?page=2","label":"Next »","active":false}],"path":"http:\/\/localhost\/api\/investments","per_page":10,"to":10,"total":19}}'
+ headers:
+ cache-control: 'no-cache, private'
+ content-type: application/json
+ x-ratelimit-limit: '60'
+ x-ratelimit-remaining: '55'
+ access-control-allow-origin: '*'
+ description: null
+ responseFields: []
+ -
+ httpMethods:
+ - GET
+ uri: 'api/investment/{id}'
+ metadata:
+ title: 'View of an investment with its initial amount and expected balance.'
+ description: ''
+ authenticated: false
+ custom: []
+ headers:
+ Content-Type: application/json
+ Accept: application/json
+ urlParameters:
+ id:
+ name: id
+ description: 'The ID of the investment.'
+ required: true
+ example: 6
+ type: integer
+ custom: []
+ queryParameters: []
+ bodyParameters: []
+ responses:
+ -
+ status: 200
+ content: '{"id":6,"owner":3,"amount":2000,"expected balance":2084.73,"create date":"2021-06-25"}'
+ headers:
+ cache-control: 'no-cache, private'
+ content-type: application/json
+ x-ratelimit-limit: '60'
+ x-ratelimit-remaining: '54'
+ access-control-allow-origin: '*'
+ description: null
+ responseFields: []
+ -
+ httpMethods:
+ - GET
+ uri: 'api/withdrawal/{id}'
+ metadata:
+ title: 'Calculate the value withdrawal of a investment.'
+ description: ''
+ authenticated: false
+ custom: []
+ headers:
+ Content-Type: application/json
+ Accept: application/json
+ urlParameters:
+ id:
+ name: id
+ description: 'The ID of the withdrawal.'
+ required: true
+ example: aut
+ type: string
+ custom: []
+ queryParameters: []
+ bodyParameters: []
+ responses:
+ -
+ status: 404
+ content: |-
+ {
+ "message": "No query results for model [App\\Models\\Investment] aut",
+ "exception": "Symfony\\Component\\HttpKernel\\Exception\\NotFoundHttpException",
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php",
+ "line": 385,
+ "trace": [
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php",
+ "line": 332,
+ "function": "prepareException",
+ "class": "Illuminate\\Foundation\\Exceptions\\Handler",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/nunomaduro/collision/src/Adapters/Laravel/ExceptionHandler.php",
+ "line": 54,
+ "function": "render",
+ "class": "Illuminate\\Foundation\\Exceptions\\Handler",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php",
+ "line": 51,
+ "function": "render",
+ "class": "NunoMaduro\\Collision\\Adapters\\Laravel\\ExceptionHandler",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
+ "line": 130,
+ "function": "handleException",
+ "class": "Illuminate\\Routing\\Pipeline",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php",
+ "line": 50,
+ "function": "Illuminate\\Pipeline\\{closure}",
+ "class": "Illuminate\\Pipeline\\Pipeline",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
+ "line": 167,
+ "function": "handle",
+ "class": "Illuminate\\Routing\\Middleware\\SubstituteBindings",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php",
+ "line": 127,
+ "function": "Illuminate\\Pipeline\\{closure}",
+ "class": "Illuminate\\Pipeline\\Pipeline",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php",
+ "line": 103,
+ "function": "handleRequest",
+ "class": "Illuminate\\Routing\\Middleware\\ThrottleRequests",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php",
+ "line": 55,
+ "function": "handleRequestUsingNamedLimiter",
+ "class": "Illuminate\\Routing\\Middleware\\ThrottleRequests",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
+ "line": 167,
+ "function": "handle",
+ "class": "Illuminate\\Routing\\Middleware\\ThrottleRequests",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
+ "line": 103,
+ "function": "Illuminate\\Pipeline\\{closure}",
+ "class": "Illuminate\\Pipeline\\Pipeline",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
+ "line": 723,
+ "function": "then",
+ "class": "Illuminate\\Pipeline\\Pipeline",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
+ "line": 698,
+ "function": "runRouteWithinStack",
+ "class": "Illuminate\\Routing\\Router",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
+ "line": 662,
+ "function": "runRoute",
+ "class": "Illuminate\\Routing\\Router",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
+ "line": 651,
+ "function": "dispatchToRoute",
+ "class": "Illuminate\\Routing\\Router",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
+ "line": 167,
+ "function": "dispatch",
+ "class": "Illuminate\\Routing\\Router",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
+ "line": 128,
+ "function": "Illuminate\\Foundation\\Http\\{closure}",
+ "class": "Illuminate\\Foundation\\Http\\Kernel",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
+ "line": 21,
+ "function": "Illuminate\\Pipeline\\{closure}",
+ "class": "Illuminate\\Pipeline\\Pipeline",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php",
+ "line": 31,
+ "function": "handle",
+ "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
+ "line": 167,
+ "function": "handle",
+ "class": "Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
+ "line": 21,
+ "function": "Illuminate\\Pipeline\\{closure}",
+ "class": "Illuminate\\Pipeline\\Pipeline",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php",
+ "line": 40,
+ "function": "handle",
+ "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
+ "line": 167,
+ "function": "handle",
+ "class": "Illuminate\\Foundation\\Http\\Middleware\\TrimStrings",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php",
+ "line": 27,
+ "function": "Illuminate\\Pipeline\\{closure}",
+ "class": "Illuminate\\Pipeline\\Pipeline",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
+ "line": 167,
+ "function": "handle",
+ "class": "Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php",
+ "line": 86,
+ "function": "Illuminate\\Pipeline\\{closure}",
+ "class": "Illuminate\\Pipeline\\Pipeline",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
+ "line": 167,
+ "function": "handle",
+ "class": "Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/fruitcake/laravel-cors/src/HandleCors.php",
+ "line": 52,
+ "function": "Illuminate\\Pipeline\\{closure}",
+ "class": "Illuminate\\Pipeline\\Pipeline",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
+ "line": 167,
+ "function": "handle",
+ "class": "Fruitcake\\Cors\\HandleCors",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php",
+ "line": 39,
+ "function": "Illuminate\\Pipeline\\{closure}",
+ "class": "Illuminate\\Pipeline\\Pipeline",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
+ "line": 167,
+ "function": "handle",
+ "class": "Illuminate\\Http\\Middleware\\TrustProxies",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
+ "line": 103,
+ "function": "Illuminate\\Pipeline\\{closure}",
+ "class": "Illuminate\\Pipeline\\Pipeline",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
+ "line": 142,
+ "function": "then",
+ "class": "Illuminate\\Pipeline\\Pipeline",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
+ "line": 111,
+ "function": "sendRequestThroughRouter",
+ "class": "Illuminate\\Foundation\\Http\\Kernel",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
+ "line": 299,
+ "function": "handle",
+ "class": "Illuminate\\Foundation\\Http\\Kernel",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
+ "line": 287,
+ "function": "callLaravelOrLumenRoute",
+ "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
+ "line": 89,
+ "function": "makeApiCall",
+ "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
+ "line": 45,
+ "function": "makeResponseCall",
+ "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
+ "line": 35,
+ "function": "makeResponseCallIfConditionsPass",
+ "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
+ "line": 222,
+ "function": "__invoke",
+ "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
+ "line": 179,
+ "function": "iterateThroughStrategies",
+ "class": "Knuckles\\Scribe\\Extracting\\Extractor",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
+ "line": 116,
+ "function": "fetchResponses",
+ "class": "Knuckles\\Scribe\\Extracting\\Extractor",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
+ "line": 117,
+ "function": "processRoute",
+ "class": "Knuckles\\Scribe\\Extracting\\Extractor",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
+ "line": 75,
+ "function": "extractEndpointsInfoFromLaravelApp",
+ "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
+ "line": 51,
+ "function": "extractEndpointsInfoAndWriteToDisk",
+ "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/knuckleswtf/scribe/src/Commands/GenerateDocumentation.php",
+ "line": 49,
+ "function": "get",
+ "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
+ "line": 36,
+ "function": "handle",
+ "class": "Knuckles\\Scribe\\Commands\\GenerateDocumentation",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Container/Util.php",
+ "line": 40,
+ "function": "Illuminate\\Container\\{closure}",
+ "class": "Illuminate\\Container\\BoundMethod",
+ "type": "::"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
+ "line": 93,
+ "function": "unwrapIfClosure",
+ "class": "Illuminate\\Container\\Util",
+ "type": "::"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
+ "line": 37,
+ "function": "callBoundMethod",
+ "class": "Illuminate\\Container\\BoundMethod",
+ "type": "::"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Container/Container.php",
+ "line": 653,
+ "function": "call",
+ "class": "Illuminate\\Container\\BoundMethod",
+ "type": "::"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Console/Command.php",
+ "line": 136,
+ "function": "call",
+ "class": "Illuminate\\Container\\Container",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/symfony/console/Command/Command.php",
+ "line": 298,
+ "function": "execute",
+ "class": "Illuminate\\Console\\Command",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Console/Command.php",
+ "line": 121,
+ "function": "run",
+ "class": "Symfony\\Component\\Console\\Command\\Command",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/symfony/console/Application.php",
+ "line": 1015,
+ "function": "run",
+ "class": "Illuminate\\Console\\Command",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/symfony/console/Application.php",
+ "line": 299,
+ "function": "doRunCommand",
+ "class": "Symfony\\Component\\Console\\Application",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/symfony/console/Application.php",
+ "line": 171,
+ "function": "doRun",
+ "class": "Symfony\\Component\\Console\\Application",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Console/Application.php",
+ "line": 94,
+ "function": "run",
+ "class": "Symfony\\Component\\Console\\Application",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php",
+ "line": 129,
+ "function": "run",
+ "class": "Illuminate\\Console\\Application",
+ "type": "->"
+ },
+ {
+ "file": "/var/www/artisan",
+ "line": 37,
+ "function": "handle",
+ "class": "Illuminate\\Foundation\\Console\\Kernel",
+ "type": "->"
+ }
+ ]
+ }
+ headers:
+ cache-control: 'no-cache, private'
+ content-type: application/json
+ x-ratelimit-limit: '60'
+ x-ratelimit-remaining: '53'
+ access-control-allow-origin: '*'
+ description: null
+ responseFields: []
+ -
+ httpMethods:
+ - GET
+ uri: 'api/list/investments/{owner}'
+ metadata:
+ title: 'List all person''s investments'
+ description: ''
+ authenticated: false
+ custom: []
+ headers:
+ Content-Type: application/json
+ Accept: application/json
+ urlParameters:
+ owner:
+ name: owner
+ description: ''
+ required: true
+ example: 11
+ type: integer
+ custom: []
+ queryParameters: []
+ bodyParameters: []
+ responses:
+ -
+ status: 200
+ content: '{"data":[],"links":{"first":"http:\/\/localhost\/api\/list\/investments\/11?page=1","last":"http:\/\/localhost\/api\/list\/investments\/11?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":null,"last_page":1,"links":[{"url":null,"label":"« Previous","active":false},{"url":"http:\/\/localhost\/api\/list\/investments\/11?page=1","label":"1","active":true},{"url":null,"label":"Next »","active":false}],"path":"http:\/\/localhost\/api\/list\/investments\/11","per_page":10,"to":null,"total":0}}'
+ headers:
+ cache-control: 'no-cache, private'
+ content-type: application/json
+ x-ratelimit-limit: '60'
+ x-ratelimit-remaining: '52'
+ access-control-allow-origin: '*'
+ description: null
+ responseFields: []
diff --git a/.scribe/endpoints/custom.0.yaml b/.scribe/endpoints/custom.0.yaml
new file mode 100644
index 000000000..8885d971d
--- /dev/null
+++ b/.scribe/endpoints/custom.0.yaml
@@ -0,0 +1,51 @@
+# To include an endpoint that isn't a part of your Laravel app (or belongs to a vendor package),
+# you can define it in a custom.*.yaml file, like this one.
+# Each custom file should contain an array of endpoints. Here's an example:
+
+#- httpMethods:
+# - POST
+# uri: api/doSomething/{param}
+# metadata:
+# groupName: The group the endpoint belongs to. Can be a new group or an existing group.
+# groupDescription: A description for the group. You don't need to set this for every endpoint; once is enough.
+# title: Do something
+# description: 'This endpoint allows you to do something.'
+# authenticated: false
+# headers:
+# Content-Type: application/json
+# Accept: application/json
+# urlParameters:
+# param:
+# name: param
+# description: A URL param for no reason.
+# required: true
+# example: 2
+# type: integer
+# queryParameters:
+# speed:
+# name: speed
+# description: How fast the thing should be done. Can be `slow` or `fast`.
+# required: false
+# example: fast
+# type: string
+# bodyParameters:
+# something:
+# name: something
+# description: The things we should do.
+# required: true
+# example:
+# - string 1
+# - string 2
+# type: 'string[]'
+# responses:
+# - status: 200
+# description: 'When the thing was done smoothly.'
+# content: # Your response content can be an object, an array, a string or empty.
+# {
+# "hey": "ho ho ho"
+# }
+# responseFields:
+# hey:
+# name: hey
+# description: Who knows?
+# type: string # This is optional
\ No newline at end of file
diff --git a/.scribe/intro.md b/.scribe/intro.md
new file mode 100644
index 000000000..cd9272848
--- /dev/null
+++ b/.scribe/intro.md
@@ -0,0 +1,14 @@
+# Introduction
+
+API developed for backend test of Coderockr!
+
+This documentation aims to provide all the information you need to work with our API.
+
+As you scroll, you'll see code examples for working with the API in different programming languages in the dark area to the right (or as part of the content on mobile).
+You can switch the language used with the tabs at the top right (or from the nav menu at the top left on mobile).
+
+> Base URL
+
+```yaml
+http://localhost:8888
+```
\ No newline at end of file
diff --git a/.styleci.yml b/.styleci.yml
new file mode 100644
index 000000000..877ea701d
--- /dev/null
+++ b/.styleci.yml
@@ -0,0 +1,14 @@
+php:
+ preset: laravel
+ version: 8
+ disabled:
+ - no_unused_imports
+ finder:
+ not-name:
+ - index.php
+ - server.php
+js:
+ finder:
+ not-name:
+ - webpack.mix.js
+css: true
diff --git a/README.md b/README.md
index c74ac566e..402910929 100644
--- a/README.md
+++ b/README.md
@@ -1,88 +1,93 @@
-# Back End Test Project
-
-You should see this challenge as an opportunity to create an application following modern development best practices (given the stack of your choice), but also feel free to use your own architecture preferences (coding standards, code organization, third-party libraries, etc). It’s perfectly fine to use vanilla code or any framework or libraries.
-
-## Scope
-
-In this challenge you should build an API for an application that stores and manages investments, it should have the following features:
-
-1. __Creation__ of an investment with an owner, a creation date and an amount.
- 1. The creation date of an investment can be today or a date in the past.
- 2. An investment should not be or become negative.
-2. __View__ of an investment with its initial amount and expected balance.
- 1. Expected balance should be the sum of the invested amount and the [gains][].
-3. __Withdrawal__ of a investment.
- 1. The withdraw will always be the sum of the initial amount and its gains,
- partial withdrawn is not supported.
- 2. Withdrawals can happen in the past or today, but can't happen before the investment creation or the future.
- 3. [Taxes][taxes] need to be applied to the withdrawals before showing the
- final value.
-4. __List__ of a person's investments
- 1. This list should have pagination.
-
-__NOTE:__ the implementation of an interface will not be evaluated.
-
-### Gain Calculation
-
-The investment will pay 0.52% every month in the same day of the investment creation.
-
-Given that the gain is paid every month, it should be treated as [compound gain][], which means that every new period (month) the amount gained will become part of the investment balance for the next payment.
-
-### Taxation
-
-When money is withdrawn, tax is triggered. Taxes apply only to the profit/gain portion of the money withdrawn. For example, if the initial investment was 1000.00, the current balance is 1200.00, then the taxes will be applied to the 200.00.
-
-The tax percentage changes according to the age of the investment:
-* If it is less than one year old, the percentage will be 22.5% (tax = 45.00).
-* If it is between one and two years old, the percentage will be 18.5% (tax = 37.00).
-* If older than two years, the percentage will be 15% (tax = 30.00).
+
Backend Test Project
+
+Laravel project in Laradock environment
+
+
+
+
+
+
+
## Requirements
-1. Create project using any technology of your preference. It’s perfectly OK to use vanilla code or any framework or libraries;
-2. Although you can use as many dependencies as you want, you should manage them wisely;
-3. It is not necessary to send the notification emails, however, the code required for that would be welcome;
-4. The API must be documented in some way.
-
-## Deliverables
-The project source code and dependencies should be made available in GitHub. Here are the steps you should follow:
-1. Fork this repository to your GitHub account (create an account if you don't have one, you will need it working with us).
-2. Create a "development" branch and commit the code to it. Do not push the code to the main branch.
-3. Include a README file that describes:
- - Special build instructions, if any
- - List of third-party libraries used and short description of why/how they were used
- - A link to the API documentation.
-4. Once the work is complete, create a pull request from "development" into "main" and send us the link.
-5. Avoid using huge commits hiding your progress. Feel free to work on a branch and use `git rebase` to adjust your commits before submitting the final version.
-
-## Coding Standards
-When working on the project be as clean and consistent as possible.
-
-## Project Deadline
-Ideally you'd finish the test project in 5 days. It shouldn't take you longer than a entire week.
-
-## Quality Assurance
-Use the following checklist to ensure high quality of the project.
-
-### General
-- First of all, the application should run without errors.
-- Are all requirements set above met?
-- Is coding style consistent?
-- The API is well documented?
-- The API has unit tests?
-
-## Submission
-1. A link to the Github repository.
-2. Briefly describe how you decided on the tools that you used.
+You must have [Docker](https://www.docker.com) installed on your machine and accept the Pull Request from development branch.
+
+## Project access
+
+#### Access the project root directory
+```bash
+$ cd backend-test
+```
+## Initial settings
+#### Copy the .env.example into the project root directory
+```bash
+$ cp .env.example .env
+```
+#### Access the laradock directory
+```bash
+$ cd laradock
+```
+#### Copy .env.example into laradock directory
+```bash
+$ cp .env.example .env
+```
+## Docker Settings
+#### Environment build
+```bash
+$ docker-compose build php-fpm workspace
+```
+```bash
+$ docker-compose up -d nginx mysql phpmyadmin
+```
+#### Exec container
+```bash
+$ docker-compose exec workspace bash
+```
+## General Settings
+#### Install dependencies
+```bash
+$ composer install
+```
+## Database Settings
+You must create a database with the following information:
+####
+```bash
+DB_CONNECTION=mysql
+DB_HOST=mysql
+DB_PORT=3306
+DB_DATABASE=coderockr
+DB_USERNAME=root
+DB_PASSWORD=root
+```
+#### Run migrations
+```bash
+$ php artisan migrate
+```
+#### Populate database with seeders
+```bash
+$ php artisan db:seed
+```
+## Final Settings
+#### Install dependencies
+```bash
+$ npm install
+```
+## General information
+#### The API is running on [localhost](http://localhost:8888) on port 8888
+#### The phpmyadmin database manager is running on [localhost](http://localhost:8081) on port 8081
+
+## Tests
+```bash
+$ php artisan test
+```
+
+## API Documentation
+#### The API Documentation is running on [localhost:8888/docs](http://localhost:8888/docs)
-## Have Fun Coding 🤘
-- This challenge description is intentionally vague in some aspects, but if you need assistance feel free to ask for help.
-- If any of the seems out of your current level, you may skip it, but remember to tell us about it in the pull request.
-## Credits
-This coding challenge was inspired on [kinvoapp/kinvo-back-end-test](https://github.com/kinvoapp/kinvo-back-end-test/blob/2f17d713de739e309d17a1a74a82c3fd0e66d128/README.md)
-[gains]: #gain-calculation
-[taxes]: #taxation
-[interest]: #interest-calculation
-[compound gain]: https://www.investopedia.com/terms/g/gain.asp
diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php
new file mode 100644
index 000000000..d8bc1d29f
--- /dev/null
+++ b/app/Console/Kernel.php
@@ -0,0 +1,32 @@
+command('inspire')->hourly();
+ }
+
+ /**
+ * Register the commands for the application.
+ *
+ * @return void
+ */
+ protected function commands()
+ {
+ $this->load(__DIR__.'/Commands');
+
+ require base_path('routes/console.php');
+ }
+}
diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php
new file mode 100644
index 000000000..8e7fbd1be
--- /dev/null
+++ b/app/Exceptions/Handler.php
@@ -0,0 +1,41 @@
+>
+ */
+ protected $dontReport = [
+ //
+ ];
+
+ /**
+ * A list of the inputs that are never flashed for validation exceptions.
+ *
+ * @var array
+ */
+ protected $dontFlash = [
+ 'current_password',
+ 'password',
+ 'password_confirmation',
+ ];
+
+ /**
+ * Register the exception handling callbacks for the application.
+ *
+ * @return void
+ */
+ public function register()
+ {
+ $this->reportable(function (Throwable $e) {
+ //
+ });
+ }
+}
diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php
new file mode 100644
index 000000000..a0a2a8a34
--- /dev/null
+++ b/app/Http/Controllers/Controller.php
@@ -0,0 +1,13 @@
+owner = $request->input('owner');
+ $investment->amount = $request->input('amount');
+ $investment->create_date = $request->input('create_date');
+
+ // validation to create a new investment
+ $now = new DateTime("now");
+ $validate = Validator::make($request->all(), [
+ 'owner' => 'required|integer|gt:0',
+ 'amount' => 'required|numeric|gte:0',
+ 'create_date' => 'required|date|before_or_equal:' . $now->format("Y-m-d")
+ ]);
+
+ // show a error in case of validation fail
+ if ($validate->fails()) {
+ return response(json_encode($validate->errors()), 400)
+ ->header('Content-Type', 'application/json');
+ }
+
+ // save a new investment
+ if( $investment->save() ){
+ return new InvestmentResource($investment);
+ }
+ }
+
+ /**
+ * View of an investment with its initial amount and expected balance.
+ *
+ * @param int $id
+ * @return \App\Http\Resources
+ */
+ public function view($id){
+ // check if investment exists
+ $investment = Investment::findOrFail($id);
+ $resource = new InvestmentResource($investment);
+
+ // calculate expected balance
+ $expectedBalance = $this->calculateGains($investment);
+ $investment['expectedBalance'] = (float) number_format($expectedBalance, 2, '.', '');
+
+ return $resource->toArrayInvest($investment);
+ }
+
+ /**
+ * Calculate the gains each month, expected balance should be the sum of the invested amount and the gains.
+ *
+ * @param Investment $investment
+ */
+ public function calculateGains(Investment $investment){
+ // get all dates needed
+ $date = $this->getDates($investment);
+
+ // check if create date of investment and date for expected balanced are equals
+ if($investment->create_date == $date['balanceDate']->format("Y-m-d")){
+ return $investment->amount;
+ }
+
+ // calculate expected balance for all months of investment
+ $expectedBalance = $investment->amount;
+ for($i = 0; $i < $date['months']; $i++){
+ $gain = $expectedBalance * (0.52 / 100);
+ $expectedBalance += $gain;
+ }
+
+ return $expectedBalance;
+
+ }
+
+ /**
+ * Get dates to use on function calculateGains and returns date of investment, date of balance and how much months and years of investment already passed.
+ *
+ * @param Investment $investment
+ */
+ public function getDates(Investment $investment){
+ // find the interval of the investment
+ $investDate = new DateTime($investment->create_date);
+ $balanceDate = new DateTime(date("Y-m-d"));
+ $interval = $investDate->diff($balanceDate);
+ $months = $interval->m;
+ $years = $interval->y;
+ if($years > 0){
+ $months += $years * 12;
+ }
+
+ // array with all info of date
+ $date = array('investDate' => $investDate, 'balanceDate' => $balanceDate, 'months' => $months, 'years' => $years);
+
+ return $date;
+ }
+
+ /**
+ * Calculate the value withdrawal of a investment.
+ *
+ * @param int $id
+ * @param Investment $investment
+ * @return \App\Http\Resources
+ */
+ public function withdrawal($id, Request $request){
+ // check if investment exists
+ $investment = Investment::findOrFail($id);
+ $resource = new InvestmentResource($investment);
+
+ //calculate taxes for withdrawal value
+ $withdrawalValue = $this->calculateTaxation($investment, $request);
+ $investment['withdrawalValue'] = (float) number_format($withdrawalValue, 2, '.', '');
+ $investment['withdrawalDate'] = $request->withdrawal_date->format("Y-m-d");
+
+ return $resource->toArrayWithdrawal($investment);
+ }
+
+ /**
+ * Calculate the taxation of a withdrawal.
+ *
+ * @param Investment $investment
+ * @param Request $request
+ */
+ public function calculateTaxation($investment, Request $request){
+ // get infos to calculate taxes and gain
+ $expectedBalance = $this->calculateGains($investment);
+ $investment['expectedBalance'] = (float) number_format($expectedBalance, 2, '.', '');
+ $taxPercent = $this->checkTax($investment, $request);
+ $investment['taxPercent'] = (float) number_format($taxPercent, 1, '.', '');
+ $gain = $expectedBalance - $investment->amount;
+ $taxes = $gain * ($taxPercent / 100);
+ $withdrawalValue = $investment->amount + $gain - $taxes;
+ return $withdrawalValue;
+ }
+
+ /**
+ * Check the taxes for a investment.
+ *
+ * @param Investment $investment
+ * @param Request $request
+ */
+ public function checkTax(Investment $investment, Request $request){
+ // get all dates needes
+ $date = $this->getDates($investment);
+
+ // set the withdrawal date today if null
+ if($request->withdrawal_date == null){
+ $request->withdrawal_date = new DateTime("now");
+ }
+
+ // validation to date of a withdrawal
+ $validate = Validator::make($request->all(), [
+ 'withdrawal_date' => 'date|before_or_equal:' . $request->withdrawal_date->format("Y-m-d") . '|after_or_equal:' . $investment->create_date
+ ]);
+
+ // show a error in case of validation fail
+ if ($validate->fails()) {
+ return response(json_encode($validate->errors()), 400)
+ ->header('Content-Type', 'application/json');
+ }
+
+ //check which tax will be charged
+ if($date['years'] < 1){
+ $taxPercent = 22.5;
+ }elseif($date['years'] >= 1 && $date['years'] < 2){
+ $taxPercent = 18.5;
+ }else{
+ $taxPercent = 15;
+ }
+ return $taxPercent;
+ }
+
+ /**
+ * List all person's investments
+ *
+ * @param int $owner
+ * @return \App\Http\Resources
+ */
+ public function list($owner){
+ // query to find if the owner exists
+ $investments = Investment::findOrFail($owner)->where('owner', $owner)->paginate(10);
+
+ return InvestmentResource::collection($investments);
+ }
+}
diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php
new file mode 100644
index 000000000..44112cd75
--- /dev/null
+++ b/app/Http/Controllers/UserController.php
@@ -0,0 +1,45 @@
+name = $request->input('name');
+ $user->email = $request->input('email');
+ $user->password = Hash::make($request->input('password'));
+
+ // validation to create a new investor
+ $validate = Validator::make($request->all(), [
+ 'name' => 'required|string|max:255',
+ 'email' => 'required|string|email|unique:users|max:255',
+ 'password' => 'required|string|min:8|confirmed'
+ ]);
+
+ // show a error in case of validation fail
+ if ($validate->fails()) {
+ return response(json_encode($validate->errors()), 400)
+ ->header('Content-Type', 'application/json');
+ }
+
+ // save a new investor
+ if( $user->save() ){
+ return new UserResource($user);
+ }
+ }
+}
diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php
new file mode 100644
index 000000000..d3722c2d5
--- /dev/null
+++ b/app/Http/Kernel.php
@@ -0,0 +1,67 @@
+
+ */
+ protected $middleware = [
+ // \App\Http\Middleware\TrustHosts::class,
+ \App\Http\Middleware\TrustProxies::class,
+ \Fruitcake\Cors\HandleCors::class,
+ \App\Http\Middleware\PreventRequestsDuringMaintenance::class,
+ \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
+ \App\Http\Middleware\TrimStrings::class,
+ \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
+ ];
+
+ /**
+ * The application's route middleware groups.
+ *
+ * @var array>
+ */
+ protected $middlewareGroups = [
+ 'web' => [
+ \App\Http\Middleware\EncryptCookies::class,
+ \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
+ \Illuminate\Session\Middleware\StartSession::class,
+ // \Illuminate\Session\Middleware\AuthenticateSession::class,
+ \Illuminate\View\Middleware\ShareErrorsFromSession::class,
+ \App\Http\Middleware\VerifyCsrfToken::class,
+ \Illuminate\Routing\Middleware\SubstituteBindings::class,
+ ],
+
+ 'api' => [
+ // \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
+ 'throttle:api',
+ \Illuminate\Routing\Middleware\SubstituteBindings::class,
+ ],
+ ];
+
+ /**
+ * The application's route middleware.
+ *
+ * These middleware may be assigned to groups or used individually.
+ *
+ * @var array
+ */
+ protected $routeMiddleware = [
+ 'auth' => \App\Http\Middleware\Authenticate::class,
+ 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
+ 'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
+ 'can' => \Illuminate\Auth\Middleware\Authorize::class,
+ 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
+ 'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
+ 'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
+ 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
+ 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
+ ];
+}
diff --git a/app/Http/Middleware/Authenticate.php b/app/Http/Middleware/Authenticate.php
new file mode 100644
index 000000000..704089a7f
--- /dev/null
+++ b/app/Http/Middleware/Authenticate.php
@@ -0,0 +1,21 @@
+expectsJson()) {
+ return route('login');
+ }
+ }
+}
diff --git a/app/Http/Middleware/EncryptCookies.php b/app/Http/Middleware/EncryptCookies.php
new file mode 100644
index 000000000..867695bdc
--- /dev/null
+++ b/app/Http/Middleware/EncryptCookies.php
@@ -0,0 +1,17 @@
+
+ */
+ protected $except = [
+ //
+ ];
+}
diff --git a/app/Http/Middleware/PreventRequestsDuringMaintenance.php b/app/Http/Middleware/PreventRequestsDuringMaintenance.php
new file mode 100644
index 000000000..74cbd9a9e
--- /dev/null
+++ b/app/Http/Middleware/PreventRequestsDuringMaintenance.php
@@ -0,0 +1,17 @@
+
+ */
+ protected $except = [
+ //
+ ];
+}
diff --git a/app/Http/Middleware/RedirectIfAuthenticated.php b/app/Http/Middleware/RedirectIfAuthenticated.php
new file mode 100644
index 000000000..a2813a064
--- /dev/null
+++ b/app/Http/Middleware/RedirectIfAuthenticated.php
@@ -0,0 +1,32 @@
+check()) {
+ return redirect(RouteServiceProvider::HOME);
+ }
+ }
+
+ return $next($request);
+ }
+}
diff --git a/app/Http/Middleware/TrimStrings.php b/app/Http/Middleware/TrimStrings.php
new file mode 100644
index 000000000..88cadcaaf
--- /dev/null
+++ b/app/Http/Middleware/TrimStrings.php
@@ -0,0 +1,19 @@
+
+ */
+ protected $except = [
+ 'current_password',
+ 'password',
+ 'password_confirmation',
+ ];
+}
diff --git a/app/Http/Middleware/TrustHosts.php b/app/Http/Middleware/TrustHosts.php
new file mode 100644
index 000000000..7186414c6
--- /dev/null
+++ b/app/Http/Middleware/TrustHosts.php
@@ -0,0 +1,20 @@
+
+ */
+ public function hosts()
+ {
+ return [
+ $this->allSubdomainsOfApplicationUrl(),
+ ];
+ }
+}
diff --git a/app/Http/Middleware/TrustProxies.php b/app/Http/Middleware/TrustProxies.php
new file mode 100644
index 000000000..3391630ec
--- /dev/null
+++ b/app/Http/Middleware/TrustProxies.php
@@ -0,0 +1,28 @@
+|string|null
+ */
+ protected $proxies;
+
+ /**
+ * The headers that should be used to detect proxies.
+ *
+ * @var int
+ */
+ protected $headers =
+ Request::HEADER_X_FORWARDED_FOR |
+ Request::HEADER_X_FORWARDED_HOST |
+ Request::HEADER_X_FORWARDED_PORT |
+ Request::HEADER_X_FORWARDED_PROTO |
+ Request::HEADER_X_FORWARDED_AWS_ELB;
+}
diff --git a/app/Http/Middleware/VerifyCsrfToken.php b/app/Http/Middleware/VerifyCsrfToken.php
new file mode 100644
index 000000000..9e8652172
--- /dev/null
+++ b/app/Http/Middleware/VerifyCsrfToken.php
@@ -0,0 +1,17 @@
+
+ */
+ protected $except = [
+ //
+ ];
+}
diff --git a/app/Http/Resources/Investment.php b/app/Http/Resources/Investment.php
new file mode 100644
index 000000000..5a875eb06
--- /dev/null
+++ b/app/Http/Resources/Investment.php
@@ -0,0 +1,75 @@
+ $this->id,
+ 'owner' => $this->owner,
+ 'amount' => $this->amount,
+ 'create date' => $this->create_date,
+ ];
+ }
+
+ /**
+ * Transform the resource into an array to list investment by id.
+ *
+ * @param \Illuminate\Http\Request $request
+ * @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable
+ */
+ public function toArrayInvest($investments)
+ {
+ return [
+ 'id' => $this->id,
+ 'owner' => $this->owner,
+ 'amount' => $this->amount,
+ 'expected balance' => $this->expectedBalance,
+ 'create date' => $this->create_date,
+ ];
+ }
+
+ /**
+ * Transform the resource into an array to list withdrawal by id.
+ *
+ * @param \Illuminate\Http\Request $request
+ * @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable
+ */
+ public function toArrayWithdrawal($investments)
+ {
+ return [
+ 'id' => $this->id,
+ 'owner' => $this->owner,
+ 'initial amount' => $this->amount,
+ 'create date' => $this->create_date,
+ 'expected balance for today' => $this->expectedBalance,
+ 'tax percent' => $this->taxPercent,
+ 'withdrawal value' => $this->withdrawalValue,
+ 'withdrawal date' => $this->withdrawalDate,
+ ];
+ }
+
+ /**
+ * Transform the resource into an array to list errors when investment not found.
+ *
+ * @param \Illuminate\Http\Request $request
+ * @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable
+ */
+ public function toArrayNotFound($e)
+ {
+ return [
+ 'Error' => 'Investment not found',
+ 'Exception' => $e->getMessage()
+ ];
+ }
+}
diff --git a/app/Http/Resources/User.php b/app/Http/Resources/User.php
new file mode 100644
index 000000000..2d8ccc3c1
--- /dev/null
+++ b/app/Http/Resources/User.php
@@ -0,0 +1,24 @@
+ $this->id,
+ 'name' => $this->name,
+ 'email' => $this->email,
+ 'password' => $this->password,
+ ];
+ }
+}
diff --git a/app/Models/Investment.php b/app/Models/Investment.php
new file mode 100644
index 000000000..1bba3b4cc
--- /dev/null
+++ b/app/Models/Investment.php
@@ -0,0 +1,11 @@
+
+ */
+ protected $fillable = [
+ 'name',
+ 'email',
+ 'password',
+ ];
+
+ /**
+ * The attributes that should be hidden for serialization.
+ *
+ * @var array
+ */
+ protected $hidden = [
+ 'password',
+ 'remember_token',
+ ];
+
+ /**
+ * The attributes that should be cast.
+ *
+ * @var array
+ */
+ protected $casts = [
+ 'email_verified_at' => 'datetime',
+ ];
+}
diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php
new file mode 100644
index 000000000..ee8ca5bcd
--- /dev/null
+++ b/app/Providers/AppServiceProvider.php
@@ -0,0 +1,28 @@
+
+ */
+ protected $policies = [
+ // 'App\Models\Model' => 'App\Policies\ModelPolicy',
+ ];
+
+ /**
+ * Register any authentication / authorization services.
+ *
+ * @return void
+ */
+ public function boot()
+ {
+ $this->registerPolicies();
+
+ //
+ }
+}
diff --git a/app/Providers/BroadcastServiceProvider.php b/app/Providers/BroadcastServiceProvider.php
new file mode 100644
index 000000000..395c518bc
--- /dev/null
+++ b/app/Providers/BroadcastServiceProvider.php
@@ -0,0 +1,21 @@
+>
+ */
+ protected $listen = [
+ Registered::class => [
+ SendEmailVerificationNotification::class,
+ ],
+ ];
+
+ /**
+ * Register any events for your application.
+ *
+ * @return void
+ */
+ public function boot()
+ {
+ //
+ }
+}
diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php
new file mode 100644
index 000000000..3bd3c81eb
--- /dev/null
+++ b/app/Providers/RouteServiceProvider.php
@@ -0,0 +1,63 @@
+configureRateLimiting();
+
+ $this->routes(function () {
+ Route::prefix('api')
+ ->middleware('api')
+ ->namespace($this->namespace)
+ ->group(base_path('routes/api.php'));
+
+ Route::middleware('web')
+ ->namespace($this->namespace)
+ ->group(base_path('routes/web.php'));
+ });
+ }
+
+ /**
+ * Configure the rate limiters for the application.
+ *
+ * @return void
+ */
+ protected function configureRateLimiting()
+ {
+ RateLimiter::for('api', function (Request $request) {
+ return Limit::perMinute(60)->by(optional($request->user())->id ?: $request->ip());
+ });
+ }
+}
diff --git a/artisan b/artisan
new file mode 100644
index 000000000..67a3329b1
--- /dev/null
+++ b/artisan
@@ -0,0 +1,53 @@
+#!/usr/bin/env php
+make(Illuminate\Contracts\Console\Kernel::class);
+
+$status = $kernel->handle(
+ $input = new Symfony\Component\Console\Input\ArgvInput,
+ new Symfony\Component\Console\Output\ConsoleOutput
+);
+
+/*
+|--------------------------------------------------------------------------
+| Shutdown The Application
+|--------------------------------------------------------------------------
+|
+| Once Artisan has finished running, we will fire off the shutdown events
+| so that any final work may be done by the application before we shut
+| down the process. This is the last thing to happen to the request.
+|
+*/
+
+$kernel->terminate($input, $status);
+
+exit($status);
diff --git a/bootstrap/app.php b/bootstrap/app.php
new file mode 100644
index 000000000..037e17df0
--- /dev/null
+++ b/bootstrap/app.php
@@ -0,0 +1,55 @@
+singleton(
+ Illuminate\Contracts\Http\Kernel::class,
+ App\Http\Kernel::class
+);
+
+$app->singleton(
+ Illuminate\Contracts\Console\Kernel::class,
+ App\Console\Kernel::class
+);
+
+$app->singleton(
+ Illuminate\Contracts\Debug\ExceptionHandler::class,
+ App\Exceptions\Handler::class
+);
+
+/*
+|--------------------------------------------------------------------------
+| Return The Application
+|--------------------------------------------------------------------------
+|
+| This script returns the application instance. The instance is given to
+| the calling script so we can separate the building of the instances
+| from the actual running of the application and sending responses.
+|
+*/
+
+return $app;
diff --git a/bootstrap/cache/.gitignore b/bootstrap/cache/.gitignore
new file mode 100644
index 000000000..d6b7ef32c
--- /dev/null
+++ b/bootstrap/cache/.gitignore
@@ -0,0 +1,2 @@
+*
+!.gitignore
diff --git a/composer.json b/composer.json
new file mode 100644
index 000000000..c7964ad17
--- /dev/null
+++ b/composer.json
@@ -0,0 +1,63 @@
+{
+ "name": "laravel/laravel",
+ "type": "project",
+ "description": "The Laravel Framework.",
+ "keywords": ["framework", "laravel"],
+ "license": "MIT",
+ "require": {
+ "php": "^7.3|^8.0",
+ "fruitcake/laravel-cors": "^2.0",
+ "guzzlehttp/guzzle": "^7.0.1",
+ "laravel/framework": "^8.75",
+ "laravel/sanctum": "^2.11",
+ "laravel/tinker": "^2.5"
+ },
+ "require-dev": {
+ "facade/ignition": "^2.5",
+ "fakerphp/faker": "^1.9.1",
+ "knuckleswtf/scribe": "^3.24",
+ "laravel/sail": "^1.0.1",
+ "mockery/mockery": "^1.4.4",
+ "nunomaduro/collision": "^5.10",
+ "phpunit/phpunit": "^9.5.10"
+ },
+ "autoload": {
+ "psr-4": {
+ "App\\": "app/",
+ "Database\\Factories\\": "database/factories/",
+ "Database\\Seeders\\": "database/seeders/"
+ }
+ },
+ "autoload-dev": {
+ "psr-4": {
+ "Tests\\": "tests/"
+ }
+ },
+ "scripts": {
+ "post-autoload-dump": [
+ "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
+ "@php artisan package:discover --ansi"
+ ],
+ "post-update-cmd": [
+ "@php artisan vendor:publish --tag=laravel-assets --ansi --force"
+ ],
+ "post-root-package-install": [
+ "@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
+ ],
+ "post-create-project-cmd": [
+ "@php artisan key:generate --ansi"
+ ]
+ },
+ "extra": {
+ "laravel": {
+ "dont-discover": []
+ }
+ },
+ "config": {
+ "optimize-autoloader": true,
+ "preferred-install": "dist",
+ "sort-packages": true
+ },
+ "minimum-stability": "dev",
+ "prefer-stable": true
+}
diff --git a/composer.lock b/composer.lock
new file mode 100644
index 000000000..1ecc04e52
--- /dev/null
+++ b/composer.lock
@@ -0,0 +1,8427 @@
+{
+ "_readme": [
+ "This file locks the dependencies of your project to a known state",
+ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
+ "This file is @generated automatically"
+ ],
+ "content-hash": "011f2c495fd63557a8aedd0aa9dea23f",
+ "packages": [
+ {
+ "name": "asm89/stack-cors",
+ "version": "v2.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/asm89/stack-cors.git",
+ "reference": "73e5b88775c64ccc0b84fb60836b30dc9d92ac4a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/asm89/stack-cors/zipball/73e5b88775c64ccc0b84fb60836b30dc9d92ac4a",
+ "reference": "73e5b88775c64ccc0b84fb60836b30dc9d92ac4a",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2|^8.0",
+ "symfony/http-foundation": "^4|^5|^6",
+ "symfony/http-kernel": "^4|^5|^6"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^7|^9",
+ "squizlabs/php_codesniffer": "^3.5"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.1-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Asm89\\Stack\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Alexander",
+ "email": "iam.asm89@gmail.com"
+ }
+ ],
+ "description": "Cross-origin resource sharing library and stack middleware",
+ "homepage": "https://github.com/asm89/stack-cors",
+ "keywords": [
+ "cors",
+ "stack"
+ ],
+ "support": {
+ "issues": "https://github.com/asm89/stack-cors/issues",
+ "source": "https://github.com/asm89/stack-cors/tree/v2.1.1"
+ },
+ "time": "2022-01-18T09:12:03+00:00"
+ },
+ {
+ "name": "brick/math",
+ "version": "0.9.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/brick/math.git",
+ "reference": "ca57d18f028f84f777b2168cd1911b0dee2343ae"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/brick/math/zipball/ca57d18f028f84f777b2168cd1911b0dee2343ae",
+ "reference": "ca57d18f028f84f777b2168cd1911b0dee2343ae",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "php": "^7.1 || ^8.0"
+ },
+ "require-dev": {
+ "php-coveralls/php-coveralls": "^2.2",
+ "phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.0",
+ "vimeo/psalm": "4.9.2"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Brick\\Math\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Arbitrary-precision arithmetic library",
+ "keywords": [
+ "Arbitrary-precision",
+ "BigInteger",
+ "BigRational",
+ "arithmetic",
+ "bigdecimal",
+ "bignum",
+ "brick",
+ "math"
+ ],
+ "support": {
+ "issues": "https://github.com/brick/math/issues",
+ "source": "https://github.com/brick/math/tree/0.9.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/BenMorel",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/brick/math",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-08-15T20:50:18+00:00"
+ },
+ {
+ "name": "dflydev/dot-access-data",
+ "version": "v3.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/dflydev/dflydev-dot-access-data.git",
+ "reference": "0992cc19268b259a39e86f296da5f0677841f42c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/0992cc19268b259a39e86f296da5f0677841f42c",
+ "reference": "0992cc19268b259a39e86f296da5f0677841f42c",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1 || ^8.0"
+ },
+ "require-dev": {
+ "phpstan/phpstan": "^0.12.42",
+ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.3",
+ "scrutinizer/ocular": "1.6.0",
+ "squizlabs/php_codesniffer": "^3.5",
+ "vimeo/psalm": "^3.14"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "3.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Dflydev\\DotAccessData\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Dragonfly Development Inc.",
+ "email": "info@dflydev.com",
+ "homepage": "http://dflydev.com"
+ },
+ {
+ "name": "Beau Simensen",
+ "email": "beau@dflydev.com",
+ "homepage": "http://beausimensen.com"
+ },
+ {
+ "name": "Carlos Frutos",
+ "email": "carlos@kiwing.it",
+ "homepage": "https://github.com/cfrutos"
+ },
+ {
+ "name": "Colin O'Dell",
+ "email": "colinodell@gmail.com",
+ "homepage": "https://www.colinodell.com"
+ }
+ ],
+ "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"
+ ],
+ "support": {
+ "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues",
+ "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.1"
+ },
+ "time": "2021-08-13T13:06:58+00:00"
+ },
+ {
+ "name": "doctrine/inflector",
+ "version": "2.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/inflector.git",
+ "reference": "8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/inflector/zipball/8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89",
+ "reference": "8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2 || ^8.0"
+ },
+ "require-dev": {
+ "doctrine/coding-standard": "^8.2",
+ "phpstan/phpstan": "^0.12",
+ "phpstan/phpstan-phpunit": "^0.12",
+ "phpstan/phpstan-strict-rules": "^0.12",
+ "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0",
+ "vimeo/psalm": "^4.10"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\Inflector\\": "lib/Doctrine/Inflector"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Guilherme Blanco",
+ "email": "guilhermeblanco@gmail.com"
+ },
+ {
+ "name": "Roman Borschel",
+ "email": "roman@code-factory.org"
+ },
+ {
+ "name": "Benjamin Eberlei",
+ "email": "kontakt@beberlei.de"
+ },
+ {
+ "name": "Jonathan Wage",
+ "email": "jonwage@gmail.com"
+ },
+ {
+ "name": "Johannes Schmitt",
+ "email": "schmittjoh@gmail.com"
+ }
+ ],
+ "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.",
+ "homepage": "https://www.doctrine-project.org/projects/inflector.html",
+ "keywords": [
+ "inflection",
+ "inflector",
+ "lowercase",
+ "manipulation",
+ "php",
+ "plural",
+ "singular",
+ "strings",
+ "uppercase",
+ "words"
+ ],
+ "support": {
+ "issues": "https://github.com/doctrine/inflector/issues",
+ "source": "https://github.com/doctrine/inflector/tree/2.0.4"
+ },
+ "funding": [
+ {
+ "url": "https://www.doctrine-project.org/sponsorship.html",
+ "type": "custom"
+ },
+ {
+ "url": "https://www.patreon.com/phpdoctrine",
+ "type": "patreon"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-10-22T20:16:43+00:00"
+ },
+ {
+ "name": "doctrine/lexer",
+ "version": "1.2.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/lexer.git",
+ "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/lexer/zipball/c268e882d4dbdd85e36e4ad69e02dc284f89d229",
+ "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1 || ^8.0"
+ },
+ "require-dev": {
+ "doctrine/coding-standard": "^9.0",
+ "phpstan/phpstan": "^1.3",
+ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
+ "vimeo/psalm": "^4.11"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Guilherme Blanco",
+ "email": "guilhermeblanco@gmail.com"
+ },
+ {
+ "name": "Roman Borschel",
+ "email": "roman@code-factory.org"
+ },
+ {
+ "name": "Johannes Schmitt",
+ "email": "schmittjoh@gmail.com"
+ }
+ ],
+ "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"
+ ],
+ "support": {
+ "issues": "https://github.com/doctrine/lexer/issues",
+ "source": "https://github.com/doctrine/lexer/tree/1.2.3"
+ },
+ "funding": [
+ {
+ "url": "https://www.doctrine-project.org/sponsorship.html",
+ "type": "custom"
+ },
+ {
+ "url": "https://www.patreon.com/phpdoctrine",
+ "type": "patreon"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-02-28T11:07:21+00:00"
+ },
+ {
+ "name": "dragonmantank/cron-expression",
+ "version": "v3.3.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/dragonmantank/cron-expression.git",
+ "reference": "be85b3f05b46c39bbc0d95f6c071ddff669510fa"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/be85b3f05b46c39bbc0d95f6c071ddff669510fa",
+ "reference": "be85b3f05b46c39bbc0d95f6c071ddff669510fa",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2|^8.0",
+ "webmozart/assert": "^1.0"
+ },
+ "replace": {
+ "mtdowling/cron-expression": "^1.0"
+ },
+ "require-dev": {
+ "phpstan/extension-installer": "^1.0",
+ "phpstan/phpstan": "^1.0",
+ "phpstan/phpstan-webmozart-assert": "^1.0",
+ "phpunit/phpunit": "^7.0|^8.0|^9.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Cron\\": "src/Cron/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Chris Tankersley",
+ "email": "chris@ctankersley.com",
+ "homepage": "https://github.com/dragonmantank"
+ }
+ ],
+ "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due",
+ "keywords": [
+ "cron",
+ "schedule"
+ ],
+ "support": {
+ "issues": "https://github.com/dragonmantank/cron-expression/issues",
+ "source": "https://github.com/dragonmantank/cron-expression/tree/v3.3.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/dragonmantank",
+ "type": "github"
+ }
+ ],
+ "time": "2022-01-18T15:43:28+00:00"
+ },
+ {
+ "name": "egulias/email-validator",
+ "version": "2.1.25",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/egulias/EmailValidator.git",
+ "reference": "0dbf5d78455d4d6a41d186da50adc1122ec066f4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/0dbf5d78455d4d6a41d186da50adc1122ec066f4",
+ "reference": "0dbf5d78455d4d6a41d186da50adc1122ec066f4",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/lexer": "^1.0.1",
+ "php": ">=5.5",
+ "symfony/polyfill-intl-idn": "^1.10"
+ },
+ "require-dev": {
+ "dominicsayers/isemail": "^3.0.7",
+ "phpunit/phpunit": "^4.8.36|^7.5.15",
+ "satooshi/php-coveralls": "^1.0.1"
+ },
+ "suggest": {
+ "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Egulias\\EmailValidator\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Eduardo Gulias Davis"
+ }
+ ],
+ "description": "A library for validating emails against several RFCs",
+ "homepage": "https://github.com/egulias/EmailValidator",
+ "keywords": [
+ "email",
+ "emailvalidation",
+ "emailvalidator",
+ "validation",
+ "validator"
+ ],
+ "support": {
+ "issues": "https://github.com/egulias/EmailValidator/issues",
+ "source": "https://github.com/egulias/EmailValidator/tree/2.1.25"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/egulias",
+ "type": "github"
+ }
+ ],
+ "time": "2020-12-29T14:50:06+00:00"
+ },
+ {
+ "name": "fruitcake/laravel-cors",
+ "version": "v2.2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/fruitcake/laravel-cors.git",
+ "reference": "783a74f5e3431d7b9805be8afb60fd0a8f743534"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/fruitcake/laravel-cors/zipball/783a74f5e3431d7b9805be8afb60fd0a8f743534",
+ "reference": "783a74f5e3431d7b9805be8afb60fd0a8f743534",
+ "shasum": ""
+ },
+ "require": {
+ "asm89/stack-cors": "^2.0.1",
+ "illuminate/contracts": "^6|^7|^8|^9",
+ "illuminate/support": "^6|^7|^8|^9",
+ "php": ">=7.2"
+ },
+ "require-dev": {
+ "laravel/framework": "^6|^7.24|^8",
+ "orchestra/testbench-dusk": "^4|^5|^6|^7",
+ "phpunit/phpunit": "^6|^7|^8|^9",
+ "squizlabs/php_codesniffer": "^3.5"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.1-dev"
+ },
+ "laravel": {
+ "providers": [
+ "Fruitcake\\Cors\\CorsServiceProvider"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Fruitcake\\Cors\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fruitcake",
+ "homepage": "https://fruitcake.nl"
+ },
+ {
+ "name": "Barry vd. Heuvel",
+ "email": "barryvdh@gmail.com"
+ }
+ ],
+ "description": "Adds CORS (Cross-Origin Resource Sharing) headers support in your Laravel application",
+ "keywords": [
+ "api",
+ "cors",
+ "crossdomain",
+ "laravel"
+ ],
+ "support": {
+ "issues": "https://github.com/fruitcake/laravel-cors/issues",
+ "source": "https://github.com/fruitcake/laravel-cors/tree/v2.2.0"
+ },
+ "funding": [
+ {
+ "url": "https://fruitcake.nl",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/barryvdh",
+ "type": "github"
+ }
+ ],
+ "time": "2022-02-23T14:25:13+00:00"
+ },
+ {
+ "name": "graham-campbell/result-type",
+ "version": "v1.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/GrahamCampbell/Result-Type.git",
+ "reference": "0690bde05318336c7221785f2a932467f98b64ca"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/0690bde05318336c7221785f2a932467f98b64ca",
+ "reference": "0690bde05318336c7221785f2a932467f98b64ca",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.0 || ^8.0",
+ "phpoption/phpoption": "^1.8"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^6.5.14 || ^7.5.20 || ^8.5.19 || ^9.5.8"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "GrahamCampbell\\ResultType\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Graham Campbell",
+ "email": "hello@gjcampbell.co.uk",
+ "homepage": "https://github.com/GrahamCampbell"
+ }
+ ],
+ "description": "An Implementation Of The Result Type",
+ "keywords": [
+ "Graham Campbell",
+ "GrahamCampbell",
+ "Result Type",
+ "Result-Type",
+ "result"
+ ],
+ "support": {
+ "issues": "https://github.com/GrahamCampbell/Result-Type/issues",
+ "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.0.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/GrahamCampbell",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/graham-campbell/result-type",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-11-21T21:41:47+00:00"
+ },
+ {
+ "name": "guzzlehttp/guzzle",
+ "version": "7.4.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/guzzle/guzzle.git",
+ "reference": "ee0a041b1760e6a53d2a39c8c34115adc2af2c79"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/guzzle/guzzle/zipball/ee0a041b1760e6a53d2a39c8c34115adc2af2c79",
+ "reference": "ee0a041b1760e6a53d2a39c8c34115adc2af2c79",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "guzzlehttp/promises": "^1.5",
+ "guzzlehttp/psr7": "^1.8.3 || ^2.1",
+ "php": "^7.2.5 || ^8.0",
+ "psr/http-client": "^1.0",
+ "symfony/deprecation-contracts": "^2.2 || ^3.0"
+ },
+ "provide": {
+ "psr/http-client-implementation": "1.0"
+ },
+ "require-dev": {
+ "bamarni/composer-bin-plugin": "^1.4.1",
+ "ext-curl": "*",
+ "php-http/client-integration-tests": "^3.0",
+ "phpunit/phpunit": "^8.5.5 || ^9.3.5",
+ "psr/log": "^1.1 || ^2.0 || ^3.0"
+ },
+ "suggest": {
+ "ext-curl": "Required for CURL handler support",
+ "ext-intl": "Required for Internationalized Domain Name (IDN) support",
+ "psr/log": "Required for using the Log middleware"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "7.4-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/functions_include.php"
+ ],
+ "psr-4": {
+ "GuzzleHttp\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Graham Campbell",
+ "email": "hello@gjcampbell.co.uk",
+ "homepage": "https://github.com/GrahamCampbell"
+ },
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ },
+ {
+ "name": "Jeremy Lindblom",
+ "email": "jeremeamia@gmail.com",
+ "homepage": "https://github.com/jeremeamia"
+ },
+ {
+ "name": "George Mponos",
+ "email": "gmponos@gmail.com",
+ "homepage": "https://github.com/gmponos"
+ },
+ {
+ "name": "Tobias Nyholm",
+ "email": "tobias.nyholm@gmail.com",
+ "homepage": "https://github.com/Nyholm"
+ },
+ {
+ "name": "Márk Sági-Kazár",
+ "email": "mark.sagikazar@gmail.com",
+ "homepage": "https://github.com/sagikazarmark"
+ },
+ {
+ "name": "Tobias Schultze",
+ "email": "webmaster@tubo-world.de",
+ "homepage": "https://github.com/Tobion"
+ }
+ ],
+ "description": "Guzzle is a PHP HTTP client library",
+ "keywords": [
+ "client",
+ "curl",
+ "framework",
+ "http",
+ "http client",
+ "psr-18",
+ "psr-7",
+ "rest",
+ "web service"
+ ],
+ "support": {
+ "issues": "https://github.com/guzzle/guzzle/issues",
+ "source": "https://github.com/guzzle/guzzle/tree/7.4.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/GrahamCampbell",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/Nyholm",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-12-06T18:43:05+00:00"
+ },
+ {
+ "name": "guzzlehttp/promises",
+ "version": "1.5.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/guzzle/promises.git",
+ "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/guzzle/promises/zipball/fe752aedc9fd8fcca3fe7ad05d419d32998a06da",
+ "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.5"
+ },
+ "require-dev": {
+ "symfony/phpunit-bridge": "^4.4 || ^5.1"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.5-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/functions_include.php"
+ ],
+ "psr-4": {
+ "GuzzleHttp\\Promise\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Graham Campbell",
+ "email": "hello@gjcampbell.co.uk",
+ "homepage": "https://github.com/GrahamCampbell"
+ },
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ },
+ {
+ "name": "Tobias Nyholm",
+ "email": "tobias.nyholm@gmail.com",
+ "homepage": "https://github.com/Nyholm"
+ },
+ {
+ "name": "Tobias Schultze",
+ "email": "webmaster@tubo-world.de",
+ "homepage": "https://github.com/Tobion"
+ }
+ ],
+ "description": "Guzzle promises library",
+ "keywords": [
+ "promise"
+ ],
+ "support": {
+ "issues": "https://github.com/guzzle/promises/issues",
+ "source": "https://github.com/guzzle/promises/tree/1.5.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/GrahamCampbell",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/Nyholm",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-10-22T20:56:57+00:00"
+ },
+ {
+ "name": "guzzlehttp/psr7",
+ "version": "2.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/guzzle/psr7.git",
+ "reference": "089edd38f5b8abba6cb01567c2a8aaa47cec4c72"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/guzzle/psr7/zipball/089edd38f5b8abba6cb01567c2a8aaa47cec4c72",
+ "reference": "089edd38f5b8abba6cb01567c2a8aaa47cec4c72",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2.5 || ^8.0",
+ "psr/http-factory": "^1.0",
+ "psr/http-message": "^1.0",
+ "ralouphie/getallheaders": "^3.0"
+ },
+ "provide": {
+ "psr/http-factory-implementation": "1.0",
+ "psr/http-message-implementation": "1.0"
+ },
+ "require-dev": {
+ "bamarni/composer-bin-plugin": "^1.4.1",
+ "http-interop/http-factory-tests": "^0.9",
+ "phpunit/phpunit": "^8.5.8 || ^9.3.10"
+ },
+ "suggest": {
+ "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.1-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "GuzzleHttp\\Psr7\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Graham Campbell",
+ "email": "hello@gjcampbell.co.uk",
+ "homepage": "https://github.com/GrahamCampbell"
+ },
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ },
+ {
+ "name": "George Mponos",
+ "email": "gmponos@gmail.com",
+ "homepage": "https://github.com/gmponos"
+ },
+ {
+ "name": "Tobias Nyholm",
+ "email": "tobias.nyholm@gmail.com",
+ "homepage": "https://github.com/Nyholm"
+ },
+ {
+ "name": "Márk Sági-Kazár",
+ "email": "mark.sagikazar@gmail.com",
+ "homepage": "https://github.com/sagikazarmark"
+ },
+ {
+ "name": "Tobias Schultze",
+ "email": "webmaster@tubo-world.de",
+ "homepage": "https://github.com/Tobion"
+ },
+ {
+ "name": "Márk Sági-Kazár",
+ "email": "mark.sagikazar@gmail.com",
+ "homepage": "https://sagikazarmark.hu"
+ }
+ ],
+ "description": "PSR-7 message implementation that also provides common utility methods",
+ "keywords": [
+ "http",
+ "message",
+ "psr-7",
+ "request",
+ "response",
+ "stream",
+ "uri",
+ "url"
+ ],
+ "support": {
+ "issues": "https://github.com/guzzle/psr7/issues",
+ "source": "https://github.com/guzzle/psr7/tree/2.1.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/GrahamCampbell",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/Nyholm",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-10-06T17:43:30+00:00"
+ },
+ {
+ "name": "laravel/framework",
+ "version": "v8.83.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/laravel/framework.git",
+ "reference": "97a549f1a83cfb32dab1eecab4c4d40a984a72b5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/laravel/framework/zipball/97a549f1a83cfb32dab1eecab4c4d40a984a72b5",
+ "reference": "97a549f1a83cfb32dab1eecab4c4d40a984a72b5",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/inflector": "^1.4|^2.0",
+ "dragonmantank/cron-expression": "^3.0.2",
+ "egulias/email-validator": "^2.1.10",
+ "ext-json": "*",
+ "ext-mbstring": "*",
+ "ext-openssl": "*",
+ "laravel/serializable-closure": "^1.0",
+ "league/commonmark": "^1.3|^2.0.2",
+ "league/flysystem": "^1.1",
+ "monolog/monolog": "^2.0",
+ "nesbot/carbon": "^2.53.1",
+ "opis/closure": "^3.6",
+ "php": "^7.3|^8.0",
+ "psr/container": "^1.0",
+ "psr/log": "^1.0|^2.0",
+ "psr/simple-cache": "^1.0",
+ "ramsey/uuid": "^4.2.2",
+ "swiftmailer/swiftmailer": "^6.3",
+ "symfony/console": "^5.4",
+ "symfony/error-handler": "^5.4",
+ "symfony/finder": "^5.4",
+ "symfony/http-foundation": "^5.4",
+ "symfony/http-kernel": "^5.4",
+ "symfony/mime": "^5.4",
+ "symfony/process": "^5.4",
+ "symfony/routing": "^5.4",
+ "symfony/var-dumper": "^5.4",
+ "tijsverkoyen/css-to-inline-styles": "^2.2.2",
+ "vlucas/phpdotenv": "^5.4.1",
+ "voku/portable-ascii": "^1.6.1"
+ },
+ "conflict": {
+ "tightenco/collect": "<5.5.33"
+ },
+ "provide": {
+ "psr/container-implementation": "1.0",
+ "psr/simple-cache-implementation": "1.0"
+ },
+ "replace": {
+ "illuminate/auth": "self.version",
+ "illuminate/broadcasting": "self.version",
+ "illuminate/bus": "self.version",
+ "illuminate/cache": "self.version",
+ "illuminate/collections": "self.version",
+ "illuminate/config": "self.version",
+ "illuminate/console": "self.version",
+ "illuminate/container": "self.version",
+ "illuminate/contracts": "self.version",
+ "illuminate/cookie": "self.version",
+ "illuminate/database": "self.version",
+ "illuminate/encryption": "self.version",
+ "illuminate/events": "self.version",
+ "illuminate/filesystem": "self.version",
+ "illuminate/hashing": "self.version",
+ "illuminate/http": "self.version",
+ "illuminate/log": "self.version",
+ "illuminate/macroable": "self.version",
+ "illuminate/mail": "self.version",
+ "illuminate/notifications": "self.version",
+ "illuminate/pagination": "self.version",
+ "illuminate/pipeline": "self.version",
+ "illuminate/queue": "self.version",
+ "illuminate/redis": "self.version",
+ "illuminate/routing": "self.version",
+ "illuminate/session": "self.version",
+ "illuminate/support": "self.version",
+ "illuminate/testing": "self.version",
+ "illuminate/translation": "self.version",
+ "illuminate/validation": "self.version",
+ "illuminate/view": "self.version"
+ },
+ "require-dev": {
+ "aws/aws-sdk-php": "^3.198.1",
+ "doctrine/dbal": "^2.13.3|^3.1.4",
+ "filp/whoops": "^2.14.3",
+ "guzzlehttp/guzzle": "^6.5.5|^7.0.1",
+ "league/flysystem-cached-adapter": "^1.0",
+ "mockery/mockery": "^1.4.4",
+ "orchestra/testbench-core": "^6.27",
+ "pda/pheanstalk": "^4.0",
+ "phpunit/phpunit": "^8.5.19|^9.5.8",
+ "predis/predis": "^1.1.9",
+ "symfony/cache": "^5.4"
+ },
+ "suggest": {
+ "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).",
+ "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage and SES mail driver (^3.198.1).",
+ "brianium/paratest": "Required to run tests in parallel (^6.0).",
+ "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.13.3|^3.1.4).",
+ "ext-bcmath": "Required to use the multiple_of validation rule.",
+ "ext-ftp": "Required to use the Flysystem FTP driver.",
+ "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().",
+ "ext-memcached": "Required to use the memcache cache driver.",
+ "ext-pcntl": "Required to use all features of the queue worker.",
+ "ext-posix": "Required to use all features of the queue worker.",
+ "ext-redis": "Required to use the Redis cache and queue drivers (^4.0|^5.0).",
+ "fakerphp/faker": "Required to use the eloquent factory builder (^1.9.1).",
+ "filp/whoops": "Required for friendly error pages in development (^2.14.3).",
+ "guzzlehttp/guzzle": "Required to use the HTTP Client, Mailgun mail driver and the ping methods on schedules (^6.5.5|^7.0.1).",
+ "laravel/tinker": "Required to use the tinker console command (^2.0).",
+ "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^1.0).",
+ "league/flysystem-cached-adapter": "Required to use the Flysystem cache (^1.0).",
+ "league/flysystem-sftp": "Required to use the Flysystem SFTP driver (^1.0).",
+ "mockery/mockery": "Required to use mocking (^1.4.4).",
+ "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).",
+ "pda/pheanstalk": "Required to use the beanstalk queue driver (^4.0).",
+ "phpunit/phpunit": "Required to use assertions and run tests (^8.5.19|^9.5.8).",
+ "predis/predis": "Required to use the predis connector (^1.1.9).",
+ "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).",
+ "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^4.0|^5.0|^6.0|^7.0).",
+ "symfony/cache": "Required to PSR-6 cache bridge (^5.4).",
+ "symfony/filesystem": "Required to enable support for relative symbolic links (^5.4).",
+ "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^2.0).",
+ "wildbit/swiftmailer-postmark": "Required to use Postmark mail driver (^3.0)."
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "8.x-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/Illuminate/Collections/helpers.php",
+ "src/Illuminate/Events/functions.php",
+ "src/Illuminate/Foundation/helpers.php",
+ "src/Illuminate/Support/helpers.php"
+ ],
+ "psr-4": {
+ "Illuminate\\": "src/Illuminate/",
+ "Illuminate\\Support\\": [
+ "src/Illuminate/Macroable/",
+ "src/Illuminate/Collections/"
+ ]
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Taylor Otwell",
+ "email": "taylor@laravel.com"
+ }
+ ],
+ "description": "The Laravel Framework.",
+ "homepage": "https://laravel.com",
+ "keywords": [
+ "framework",
+ "laravel"
+ ],
+ "support": {
+ "issues": "https://github.com/laravel/framework/issues",
+ "source": "https://github.com/laravel/framework"
+ },
+ "time": "2022-03-08T16:12:54+00:00"
+ },
+ {
+ "name": "laravel/sanctum",
+ "version": "v2.14.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/laravel/sanctum.git",
+ "reference": "dc5d749ba9bfcfd68d8f5c272238f88bea223e66"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/laravel/sanctum/zipball/dc5d749ba9bfcfd68d8f5c272238f88bea223e66",
+ "reference": "dc5d749ba9bfcfd68d8f5c272238f88bea223e66",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "illuminate/contracts": "^6.9|^7.0|^8.0|^9.0",
+ "illuminate/database": "^6.9|^7.0|^8.0|^9.0",
+ "illuminate/support": "^6.9|^7.0|^8.0|^9.0",
+ "php": "^7.2|^8.0"
+ },
+ "require-dev": {
+ "mockery/mockery": "^1.0",
+ "orchestra/testbench": "^4.0|^5.0|^6.0|^7.0",
+ "phpunit/phpunit": "^8.0|^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.x-dev"
+ },
+ "laravel": {
+ "providers": [
+ "Laravel\\Sanctum\\SanctumServiceProvider"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Laravel\\Sanctum\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Taylor Otwell",
+ "email": "taylor@laravel.com"
+ }
+ ],
+ "description": "Laravel Sanctum provides a featherweight authentication system for SPAs and simple APIs.",
+ "keywords": [
+ "auth",
+ "laravel",
+ "sanctum"
+ ],
+ "support": {
+ "issues": "https://github.com/laravel/sanctum/issues",
+ "source": "https://github.com/laravel/sanctum"
+ },
+ "time": "2022-02-16T14:40:23+00:00"
+ },
+ {
+ "name": "laravel/serializable-closure",
+ "version": "v1.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/laravel/serializable-closure.git",
+ "reference": "9e4b005daa20b0c161f3845040046dc9ddc1d74e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/9e4b005daa20b0c161f3845040046dc9ddc1d74e",
+ "reference": "9e4b005daa20b0c161f3845040046dc9ddc1d74e",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.3|^8.0"
+ },
+ "require-dev": {
+ "pestphp/pest": "^1.18",
+ "phpstan/phpstan": "^0.12.98",
+ "symfony/var-dumper": "^5.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Laravel\\SerializableClosure\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Taylor Otwell",
+ "email": "taylor@laravel.com"
+ },
+ {
+ "name": "Nuno Maduro",
+ "email": "nuno@laravel.com"
+ }
+ ],
+ "description": "Laravel Serializable Closure provides an easy and secure way to serialize closures in PHP.",
+ "keywords": [
+ "closure",
+ "laravel",
+ "serializable"
+ ],
+ "support": {
+ "issues": "https://github.com/laravel/serializable-closure/issues",
+ "source": "https://github.com/laravel/serializable-closure"
+ },
+ "time": "2022-02-11T19:23:53+00:00"
+ },
+ {
+ "name": "laravel/tinker",
+ "version": "v2.7.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/laravel/tinker.git",
+ "reference": "5f2f9815b7631b9f586a3de7933c25f9327d4073"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/laravel/tinker/zipball/5f2f9815b7631b9f586a3de7933c25f9327d4073",
+ "reference": "5f2f9815b7631b9f586a3de7933c25f9327d4073",
+ "shasum": ""
+ },
+ "require": {
+ "illuminate/console": "^6.0|^7.0|^8.0|^9.0",
+ "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0",
+ "illuminate/support": "^6.0|^7.0|^8.0|^9.0",
+ "php": "^7.2.5|^8.0",
+ "psy/psysh": "^0.10.4|^0.11.1",
+ "symfony/var-dumper": "^4.3.4|^5.0|^6.0"
+ },
+ "require-dev": {
+ "mockery/mockery": "~1.3.3|^1.4.2",
+ "phpunit/phpunit": "^8.5.8|^9.3.3"
+ },
+ "suggest": {
+ "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0|^9.0)."
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.x-dev"
+ },
+ "laravel": {
+ "providers": [
+ "Laravel\\Tinker\\TinkerServiceProvider"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Laravel\\Tinker\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Taylor Otwell",
+ "email": "taylor@laravel.com"
+ }
+ ],
+ "description": "Powerful REPL for the Laravel framework.",
+ "keywords": [
+ "REPL",
+ "Tinker",
+ "laravel",
+ "psysh"
+ ],
+ "support": {
+ "issues": "https://github.com/laravel/tinker/issues",
+ "source": "https://github.com/laravel/tinker/tree/v2.7.0"
+ },
+ "time": "2022-01-10T08:52:49+00:00"
+ },
+ {
+ "name": "league/commonmark",
+ "version": "2.2.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/thephpleague/commonmark.git",
+ "reference": "47b015bc4e50fd4438c1ffef6139a1fb65d2ab71"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/47b015bc4e50fd4438c1ffef6139a1fb65d2ab71",
+ "reference": "47b015bc4e50fd4438c1ffef6139a1fb65d2ab71",
+ "shasum": ""
+ },
+ "require": {
+ "ext-mbstring": "*",
+ "league/config": "^1.1.1",
+ "php": "^7.4 || ^8.0",
+ "psr/event-dispatcher": "^1.0",
+ "symfony/deprecation-contracts": "^2.1 || ^3.0",
+ "symfony/polyfill-php80": "^1.15"
+ },
+ "require-dev": {
+ "cebe/markdown": "^1.0",
+ "commonmark/cmark": "0.30.0",
+ "commonmark/commonmark.js": "0.30.0",
+ "composer/package-versions-deprecated": "^1.8",
+ "erusev/parsedown": "^1.0",
+ "ext-json": "*",
+ "github/gfm": "0.29.0",
+ "michelf/php-markdown": "^1.4",
+ "phpstan/phpstan": "^0.12.88 || ^1.0.0",
+ "phpunit/phpunit": "^9.5.5",
+ "scrutinizer/ocular": "^1.8.1",
+ "symfony/finder": "^5.3",
+ "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0",
+ "unleashedtech/php-coding-standard": "^3.1",
+ "vimeo/psalm": "^4.7.3"
+ },
+ "suggest": {
+ "symfony/yaml": "v2.3+ required if using the Front Matter extension"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "2.3-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "League\\CommonMark\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Colin O'Dell",
+ "email": "colinodell@gmail.com",
+ "homepage": "https://www.colinodell.com",
+ "role": "Lead Developer"
+ }
+ ],
+ "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and GitHub-Flavored Markdown (GFM)",
+ "homepage": "https://commonmark.thephpleague.com",
+ "keywords": [
+ "commonmark",
+ "flavored",
+ "gfm",
+ "github",
+ "github-flavored",
+ "markdown",
+ "md",
+ "parser"
+ ],
+ "support": {
+ "docs": "https://commonmark.thephpleague.com/",
+ "forum": "https://github.com/thephpleague/commonmark/discussions",
+ "issues": "https://github.com/thephpleague/commonmark/issues",
+ "rss": "https://github.com/thephpleague/commonmark/releases.atom",
+ "source": "https://github.com/thephpleague/commonmark"
+ },
+ "funding": [
+ {
+ "url": "https://www.colinodell.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://www.paypal.me/colinpodell/10.00",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/colinodell",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/league/commonmark",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-02-26T21:24:45+00:00"
+ },
+ {
+ "name": "league/config",
+ "version": "v1.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/thephpleague/config.git",
+ "reference": "a9d39eeeb6cc49d10a6e6c36f22c4c1f4a767f3e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/thephpleague/config/zipball/a9d39eeeb6cc49d10a6e6c36f22c4c1f4a767f3e",
+ "reference": "a9d39eeeb6cc49d10a6e6c36f22c4c1f4a767f3e",
+ "shasum": ""
+ },
+ "require": {
+ "dflydev/dot-access-data": "^3.0.1",
+ "nette/schema": "^1.2",
+ "php": "^7.4 || ^8.0"
+ },
+ "require-dev": {
+ "phpstan/phpstan": "^0.12.90",
+ "phpunit/phpunit": "^9.5.5",
+ "scrutinizer/ocular": "^1.8.1",
+ "unleashedtech/php-coding-standard": "^3.1",
+ "vimeo/psalm": "^4.7.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.2-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "League\\Config\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Colin O'Dell",
+ "email": "colinodell@gmail.com",
+ "homepage": "https://www.colinodell.com",
+ "role": "Lead Developer"
+ }
+ ],
+ "description": "Define configuration arrays with strict schemas and access values with dot notation",
+ "homepage": "https://config.thephpleague.com",
+ "keywords": [
+ "array",
+ "config",
+ "configuration",
+ "dot",
+ "dot-access",
+ "nested",
+ "schema"
+ ],
+ "support": {
+ "docs": "https://config.thephpleague.com/",
+ "issues": "https://github.com/thephpleague/config/issues",
+ "rss": "https://github.com/thephpleague/config/releases.atom",
+ "source": "https://github.com/thephpleague/config"
+ },
+ "funding": [
+ {
+ "url": "https://www.colinodell.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://www.paypal.me/colinpodell/10.00",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/colinodell",
+ "type": "github"
+ }
+ ],
+ "time": "2021-08-14T12:15:32+00:00"
+ },
+ {
+ "name": "league/flysystem",
+ "version": "1.1.9",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/thephpleague/flysystem.git",
+ "reference": "094defdb4a7001845300334e7c1ee2335925ef99"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/094defdb4a7001845300334e7c1ee2335925ef99",
+ "reference": "094defdb4a7001845300334e7c1ee2335925ef99",
+ "shasum": ""
+ },
+ "require": {
+ "ext-fileinfo": "*",
+ "league/mime-type-detection": "^1.3",
+ "php": "^7.2.5 || ^8.0"
+ },
+ "conflict": {
+ "league/flysystem-sftp": "<1.0.6"
+ },
+ "require-dev": {
+ "phpspec/prophecy": "^1.11.1",
+ "phpunit/phpunit": "^8.5.8"
+ },
+ "suggest": {
+ "ext-ftp": "Allows you to use FTP server storage",
+ "ext-openssl": "Allows you to use FTPS server storage",
+ "league/flysystem-aws-s3-v2": "Allows you to use S3 storage with AWS SDK v2",
+ "league/flysystem-aws-s3-v3": "Allows you to use S3 storage with AWS SDK v3",
+ "league/flysystem-azure": "Allows you to use Windows Azure Blob storage",
+ "league/flysystem-cached-adapter": "Flysystem adapter decorator for metadata caching",
+ "league/flysystem-eventable-filesystem": "Allows you to use EventableFilesystem",
+ "league/flysystem-rackspace": "Allows you to use Rackspace Cloud Files",
+ "league/flysystem-sftp": "Allows you to use SFTP server storage via phpseclib",
+ "league/flysystem-webdav": "Allows you to use WebDAV storage",
+ "league/flysystem-ziparchive": "Allows you to use ZipArchive adapter",
+ "spatie/flysystem-dropbox": "Allows you to use Dropbox storage",
+ "srmklive/flysystem-dropbox-v2": "Allows you to use Dropbox storage for PHP 5 applications"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.1-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "League\\Flysystem\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Frank de Jonge",
+ "email": "info@frenky.net"
+ }
+ ],
+ "description": "Filesystem abstraction: Many filesystems, one API.",
+ "keywords": [
+ "Cloud Files",
+ "WebDAV",
+ "abstraction",
+ "aws",
+ "cloud",
+ "copy.com",
+ "dropbox",
+ "file systems",
+ "files",
+ "filesystem",
+ "filesystems",
+ "ftp",
+ "rackspace",
+ "remote",
+ "s3",
+ "sftp",
+ "storage"
+ ],
+ "support": {
+ "issues": "https://github.com/thephpleague/flysystem/issues",
+ "source": "https://github.com/thephpleague/flysystem/tree/1.1.9"
+ },
+ "funding": [
+ {
+ "url": "https://offset.earth/frankdejonge",
+ "type": "other"
+ }
+ ],
+ "time": "2021-12-09T09:40:50+00:00"
+ },
+ {
+ "name": "league/mime-type-detection",
+ "version": "1.9.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/thephpleague/mime-type-detection.git",
+ "reference": "aa70e813a6ad3d1558fc927863d47309b4c23e69"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/aa70e813a6ad3d1558fc927863d47309b4c23e69",
+ "reference": "aa70e813a6ad3d1558fc927863d47309b4c23e69",
+ "shasum": ""
+ },
+ "require": {
+ "ext-fileinfo": "*",
+ "php": "^7.2 || ^8.0"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "^3.2",
+ "phpstan/phpstan": "^0.12.68",
+ "phpunit/phpunit": "^8.5.8 || ^9.3"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "League\\MimeTypeDetection\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Frank de Jonge",
+ "email": "info@frankdejonge.nl"
+ }
+ ],
+ "description": "Mime-type detection for Flysystem",
+ "support": {
+ "issues": "https://github.com/thephpleague/mime-type-detection/issues",
+ "source": "https://github.com/thephpleague/mime-type-detection/tree/1.9.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/frankdejonge",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/league/flysystem",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-11-21T11:48:40+00:00"
+ },
+ {
+ "name": "monolog/monolog",
+ "version": "2.3.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Seldaek/monolog.git",
+ "reference": "fd4380d6fc37626e2f799f29d91195040137eba9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Seldaek/monolog/zipball/fd4380d6fc37626e2f799f29d91195040137eba9",
+ "reference": "fd4380d6fc37626e2f799f29d91195040137eba9",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2",
+ "psr/log": "^1.0.1 || ^2.0 || ^3.0"
+ },
+ "provide": {
+ "psr/log-implementation": "1.0.0 || 2.0.0 || 3.0.0"
+ },
+ "require-dev": {
+ "aws/aws-sdk-php": "^2.4.9 || ^3.0",
+ "doctrine/couchdb": "~1.0@dev",
+ "elasticsearch/elasticsearch": "^7",
+ "graylog2/gelf-php": "^1.4.2",
+ "mongodb/mongodb": "^1.8",
+ "php-amqplib/php-amqplib": "~2.4 || ^3",
+ "php-console/php-console": "^3.1.3",
+ "phpspec/prophecy": "^1.6.1",
+ "phpstan/phpstan": "^0.12.91",
+ "phpunit/phpunit": "^8.5",
+ "predis/predis": "^1.1",
+ "rollbar/rollbar": "^1.3",
+ "ruflin/elastica": ">=0.90@dev",
+ "swiftmailer/swiftmailer": "^5.3|^6.0"
+ },
+ "suggest": {
+ "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB",
+ "doctrine/couchdb": "Allow sending log messages to a CouchDB server",
+ "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client",
+ "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)",
+ "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler",
+ "ext-mbstring": "Allow to work properly with unicode symbols",
+ "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)",
+ "ext-openssl": "Required to send log messages using SSL",
+ "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)",
+ "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server",
+ "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)",
+ "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib",
+ "php-console/php-console": "Allow sending log messages to Google Chrome",
+ "rollbar/rollbar": "Allow sending log messages to Rollbar",
+ "ruflin/elastica": "Allow sending log messages to an Elastic Search server"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "2.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Monolog\\": "src/Monolog"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be",
+ "homepage": "https://seld.be"
+ }
+ ],
+ "description": "Sends your logs to files, sockets, inboxes, databases and various web services",
+ "homepage": "https://github.com/Seldaek/monolog",
+ "keywords": [
+ "log",
+ "logging",
+ "psr-3"
+ ],
+ "support": {
+ "issues": "https://github.com/Seldaek/monolog/issues",
+ "source": "https://github.com/Seldaek/monolog/tree/2.3.5"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/Seldaek",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/monolog/monolog",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-10-01T21:08:31+00:00"
+ },
+ {
+ "name": "nesbot/carbon",
+ "version": "2.57.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/briannesbitt/Carbon.git",
+ "reference": "4a54375c21eea4811dbd1149fe6b246517554e78"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/4a54375c21eea4811dbd1149fe6b246517554e78",
+ "reference": "4a54375c21eea4811dbd1149fe6b246517554e78",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "php": "^7.1.8 || ^8.0",
+ "symfony/polyfill-mbstring": "^1.0",
+ "symfony/polyfill-php80": "^1.16",
+ "symfony/translation": "^3.4 || ^4.0 || ^5.0 || ^6.0"
+ },
+ "require-dev": {
+ "doctrine/dbal": "^2.0 || ^3.0",
+ "doctrine/orm": "^2.7",
+ "friendsofphp/php-cs-fixer": "^3.0",
+ "kylekatarnls/multi-tester": "^2.0",
+ "phpmd/phpmd": "^2.9",
+ "phpstan/extension-installer": "^1.0",
+ "phpstan/phpstan": "^0.12.54 || ^1.0",
+ "phpunit/phpunit": "^7.5.20 || ^8.5.14",
+ "squizlabs/php_codesniffer": "^3.4"
+ },
+ "bin": [
+ "bin/carbon"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-3.x": "3.x-dev",
+ "dev-master": "2.x-dev"
+ },
+ "laravel": {
+ "providers": [
+ "Carbon\\Laravel\\ServiceProvider"
+ ]
+ },
+ "phpstan": {
+ "includes": [
+ "extension.neon"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Carbon\\": "src/Carbon/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Brian Nesbitt",
+ "email": "brian@nesbot.com",
+ "homepage": "https://markido.com"
+ },
+ {
+ "name": "kylekatarnls",
+ "homepage": "https://github.com/kylekatarnls"
+ }
+ ],
+ "description": "An API extension for DateTime that supports 281 different languages.",
+ "homepage": "https://carbon.nesbot.com",
+ "keywords": [
+ "date",
+ "datetime",
+ "time"
+ ],
+ "support": {
+ "docs": "https://carbon.nesbot.com/docs",
+ "issues": "https://github.com/briannesbitt/Carbon/issues",
+ "source": "https://github.com/briannesbitt/Carbon"
+ },
+ "funding": [
+ {
+ "url": "https://opencollective.com/Carbon",
+ "type": "open_collective"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/nesbot/carbon",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-02-13T18:13:33+00:00"
+ },
+ {
+ "name": "nette/schema",
+ "version": "v1.2.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/nette/schema.git",
+ "reference": "9a39cef03a5b34c7de64f551538cbba05c2be5df"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/nette/schema/zipball/9a39cef03a5b34c7de64f551538cbba05c2be5df",
+ "reference": "9a39cef03a5b34c7de64f551538cbba05c2be5df",
+ "shasum": ""
+ },
+ "require": {
+ "nette/utils": "^2.5.7 || ^3.1.5 || ^4.0",
+ "php": ">=7.1 <8.2"
+ },
+ "require-dev": {
+ "nette/tester": "^2.3 || ^2.4",
+ "phpstan/phpstan-nette": "^0.12",
+ "tracy/tracy": "^2.7"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.2-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause",
+ "GPL-2.0-only",
+ "GPL-3.0-only"
+ ],
+ "authors": [
+ {
+ "name": "David Grudl",
+ "homepage": "https://davidgrudl.com"
+ },
+ {
+ "name": "Nette Community",
+ "homepage": "https://nette.org/contributors"
+ }
+ ],
+ "description": "📐 Nette Schema: validating data structures against a given Schema.",
+ "homepage": "https://nette.org",
+ "keywords": [
+ "config",
+ "nette"
+ ],
+ "support": {
+ "issues": "https://github.com/nette/schema/issues",
+ "source": "https://github.com/nette/schema/tree/v1.2.2"
+ },
+ "time": "2021-10-15T11:40:02+00:00"
+ },
+ {
+ "name": "nette/utils",
+ "version": "v3.2.7",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/nette/utils.git",
+ "reference": "0af4e3de4df9f1543534beab255ccf459e7a2c99"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/nette/utils/zipball/0af4e3de4df9f1543534beab255ccf459e7a2c99",
+ "reference": "0af4e3de4df9f1543534beab255ccf459e7a2c99",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2 <8.2"
+ },
+ "conflict": {
+ "nette/di": "<3.0.6"
+ },
+ "require-dev": {
+ "nette/tester": "~2.0",
+ "phpstan/phpstan": "^1.0",
+ "tracy/tracy": "^2.3"
+ },
+ "suggest": {
+ "ext-gd": "to use Image",
+ "ext-iconv": "to use Strings::webalize(), toAscii(), chr() and reverse()",
+ "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()",
+ "ext-json": "to use Nette\\Utils\\Json",
+ "ext-mbstring": "to use Strings::lower() etc...",
+ "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()",
+ "ext-xml": "to use Strings::length() etc. when mbstring is not available"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.2-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause",
+ "GPL-2.0-only",
+ "GPL-3.0-only"
+ ],
+ "authors": [
+ {
+ "name": "David Grudl",
+ "homepage": "https://davidgrudl.com"
+ },
+ {
+ "name": "Nette Community",
+ "homepage": "https://nette.org/contributors"
+ }
+ ],
+ "description": "🛠 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.",
+ "homepage": "https://nette.org",
+ "keywords": [
+ "array",
+ "core",
+ "datetime",
+ "images",
+ "json",
+ "nette",
+ "paginator",
+ "password",
+ "slugify",
+ "string",
+ "unicode",
+ "utf-8",
+ "utility",
+ "validation"
+ ],
+ "support": {
+ "issues": "https://github.com/nette/utils/issues",
+ "source": "https://github.com/nette/utils/tree/v3.2.7"
+ },
+ "time": "2022-01-24T11:29:14+00:00"
+ },
+ {
+ "name": "nikic/php-parser",
+ "version": "v4.13.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/nikic/PHP-Parser.git",
+ "reference": "210577fe3cf7badcc5814d99455df46564f3c077"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/210577fe3cf7badcc5814d99455df46564f3c077",
+ "reference": "210577fe3cf7badcc5814d99455df46564f3c077",
+ "shasum": ""
+ },
+ "require": {
+ "ext-tokenizer": "*",
+ "php": ">=7.0"
+ },
+ "require-dev": {
+ "ircmaxell/php-yacc": "^0.0.7",
+ "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0"
+ },
+ "bin": [
+ "bin/php-parse"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.9-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "PhpParser\\": "lib/PhpParser"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Nikita Popov"
+ }
+ ],
+ "description": "A PHP parser written in PHP",
+ "keywords": [
+ "parser",
+ "php"
+ ],
+ "support": {
+ "issues": "https://github.com/nikic/PHP-Parser/issues",
+ "source": "https://github.com/nikic/PHP-Parser/tree/v4.13.2"
+ },
+ "time": "2021-11-30T19:35:32+00:00"
+ },
+ {
+ "name": "opis/closure",
+ "version": "3.6.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/opis/closure.git",
+ "reference": "3d81e4309d2a927abbe66df935f4bb60082805ad"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/opis/closure/zipball/3d81e4309d2a927abbe66df935f4bb60082805ad",
+ "reference": "3d81e4309d2a927abbe66df935f4bb60082805ad",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.4 || ^7.0 || ^8.0"
+ },
+ "require-dev": {
+ "jeremeamia/superclosure": "^2.0",
+ "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.6.x-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "functions.php"
+ ],
+ "psr-4": {
+ "Opis\\Closure\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Marius Sarca",
+ "email": "marius.sarca@gmail.com"
+ },
+ {
+ "name": "Sorin Sarca",
+ "email": "sarca_sorin@hotmail.com"
+ }
+ ],
+ "description": "A library that can be used to serialize closures (anonymous functions) and arbitrary objects.",
+ "homepage": "https://opis.io/closure",
+ "keywords": [
+ "anonymous functions",
+ "closure",
+ "function",
+ "serializable",
+ "serialization",
+ "serialize"
+ ],
+ "support": {
+ "issues": "https://github.com/opis/closure/issues",
+ "source": "https://github.com/opis/closure/tree/3.6.3"
+ },
+ "time": "2022-01-27T09:35:39+00:00"
+ },
+ {
+ "name": "phpoption/phpoption",
+ "version": "1.8.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/schmittjoh/php-option.git",
+ "reference": "eab7a0df01fe2344d172bff4cd6dbd3f8b84ad15"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/eab7a0df01fe2344d172bff4cd6dbd3f8b84ad15",
+ "reference": "eab7a0df01fe2344d172bff4cd6dbd3f8b84ad15",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.0 || ^8.0"
+ },
+ "require-dev": {
+ "bamarni/composer-bin-plugin": "^1.4.1",
+ "phpunit/phpunit": "^6.5.14 || ^7.5.20 || ^8.5.19 || ^9.5.8"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.8-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "PhpOption\\": "src/PhpOption/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "Apache-2.0"
+ ],
+ "authors": [
+ {
+ "name": "Johannes M. Schmitt",
+ "email": "schmittjoh@gmail.com",
+ "homepage": "https://github.com/schmittjoh"
+ },
+ {
+ "name": "Graham Campbell",
+ "email": "hello@gjcampbell.co.uk",
+ "homepage": "https://github.com/GrahamCampbell"
+ }
+ ],
+ "description": "Option Type for PHP",
+ "keywords": [
+ "language",
+ "option",
+ "php",
+ "type"
+ ],
+ "support": {
+ "issues": "https://github.com/schmittjoh/php-option/issues",
+ "source": "https://github.com/schmittjoh/php-option/tree/1.8.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/GrahamCampbell",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-12-04T23:24:31+00:00"
+ },
+ {
+ "name": "psr/container",
+ "version": "1.1.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/container.git",
+ "reference": "513e0666f7216c7459170d56df27dfcefe1689ea"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea",
+ "reference": "513e0666f7216c7459170d56df27dfcefe1689ea",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.4.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Psr\\Container\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "Common Container Interface (PHP FIG PSR-11)",
+ "homepage": "https://github.com/php-fig/container",
+ "keywords": [
+ "PSR-11",
+ "container",
+ "container-interface",
+ "container-interop",
+ "psr"
+ ],
+ "support": {
+ "issues": "https://github.com/php-fig/container/issues",
+ "source": "https://github.com/php-fig/container/tree/1.1.2"
+ },
+ "time": "2021-11-05T16:50:12+00:00"
+ },
+ {
+ "name": "psr/event-dispatcher",
+ "version": "1.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/event-dispatcher.git",
+ "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0",
+ "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\EventDispatcher\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
+ "description": "Standard interfaces for event handling.",
+ "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"
+ },
+ "time": "2019-01-08T18:20:26+00:00"
+ },
+ {
+ "name": "psr/http-client",
+ "version": "1.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/http-client.git",
+ "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621",
+ "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.0 || ^8.0",
+ "psr/http-message": "^1.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Http\\Client\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for HTTP clients",
+ "homepage": "https://github.com/php-fig/http-client",
+ "keywords": [
+ "http",
+ "http-client",
+ "psr",
+ "psr-18"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/http-client/tree/master"
+ },
+ "time": "2020-06-29T06:28:15+00:00"
+ },
+ {
+ "name": "psr/http-factory",
+ "version": "1.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/http-factory.git",
+ "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be",
+ "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.0.0",
+ "psr/http-message": "^1.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Http\\Message\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interfaces for PSR-7 HTTP message factories",
+ "keywords": [
+ "factory",
+ "http",
+ "message",
+ "psr",
+ "psr-17",
+ "psr-7",
+ "request",
+ "response"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/http-factory/tree/master"
+ },
+ "time": "2019-04-30T12:38:16+00:00"
+ },
+ {
+ "name": "psr/http-message",
+ "version": "1.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/http-message.git",
+ "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363",
+ "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Http\\Message\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for HTTP messages",
+ "homepage": "https://github.com/php-fig/http-message",
+ "keywords": [
+ "http",
+ "http-message",
+ "psr",
+ "psr-7",
+ "request",
+ "response"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/http-message/tree/master"
+ },
+ "time": "2016-08-06T14:39:51+00:00"
+ },
+ {
+ "name": "psr/log",
+ "version": "1.1.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/log.git",
+ "reference": "d49695b909c3b7628b6289db5479a1c204601f11"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11",
+ "reference": "d49695b909c3b7628b6289db5479a1c204601f11",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Log\\": "Psr/Log/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for logging libraries",
+ "homepage": "https://github.com/php-fig/log",
+ "keywords": [
+ "log",
+ "psr",
+ "psr-3"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/log/tree/1.1.4"
+ },
+ "time": "2021-05-03T11:20:27+00:00"
+ },
+ {
+ "name": "psr/simple-cache",
+ "version": "1.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/simple-cache.git",
+ "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b",
+ "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\SimpleCache\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interfaces for simple caching",
+ "keywords": [
+ "cache",
+ "caching",
+ "psr",
+ "psr-16",
+ "simple-cache"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/simple-cache/tree/master"
+ },
+ "time": "2017-10-23T01:57:42+00:00"
+ },
+ {
+ "name": "psy/psysh",
+ "version": "v0.11.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/bobthecow/psysh.git",
+ "reference": "7f7da640d68b9c9fec819caae7c744a213df6514"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/bobthecow/psysh/zipball/7f7da640d68b9c9fec819caae7c744a213df6514",
+ "reference": "7f7da640d68b9c9fec819caae7c744a213df6514",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "ext-tokenizer": "*",
+ "nikic/php-parser": "^4.0 || ^3.1",
+ "php": "^8.0 || ^7.0.8",
+ "symfony/console": "^6.0 || ^5.0 || ^4.0 || ^3.4",
+ "symfony/var-dumper": "^6.0 || ^5.0 || ^4.0 || ^3.4"
+ },
+ "conflict": {
+ "symfony/console": "4.4.37 || 5.3.14 || 5.3.15 || 5.4.3 || 5.4.4 || 6.0.3 || 6.0.4"
+ },
+ "require-dev": {
+ "bamarni/composer-bin-plugin": "^1.2",
+ "hoa/console": "3.17.05.02"
+ },
+ "suggest": {
+ "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)",
+ "ext-pdo-sqlite": "The doc command requires SQLite to work.",
+ "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well.",
+ "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history.",
+ "hoa/console": "A pure PHP readline implementation. You'll want this if your PHP install doesn't already support readline or libedit."
+ },
+ "bin": [
+ "bin/psysh"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "0.11.x-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/functions.php"
+ ],
+ "psr-4": {
+ "Psy\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Justin Hileman",
+ "email": "justin@justinhileman.info",
+ "homepage": "http://justinhileman.com"
+ }
+ ],
+ "description": "An interactive shell for modern PHP.",
+ "homepage": "http://psysh.org",
+ "keywords": [
+ "REPL",
+ "console",
+ "interactive",
+ "shell"
+ ],
+ "support": {
+ "issues": "https://github.com/bobthecow/psysh/issues",
+ "source": "https://github.com/bobthecow/psysh/tree/v0.11.2"
+ },
+ "time": "2022-02-28T15:28:54+00:00"
+ },
+ {
+ "name": "ralouphie/getallheaders",
+ "version": "3.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/ralouphie/getallheaders.git",
+ "reference": "120b605dfeb996808c31b6477290a714d356e822"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822",
+ "reference": "120b605dfeb996808c31b6477290a714d356e822",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.6"
+ },
+ "require-dev": {
+ "php-coveralls/php-coveralls": "^2.1",
+ "phpunit/phpunit": "^5 || ^6.5"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "src/getallheaders.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Ralph Khattar",
+ "email": "ralph.khattar@gmail.com"
+ }
+ ],
+ "description": "A polyfill for getallheaders.",
+ "support": {
+ "issues": "https://github.com/ralouphie/getallheaders/issues",
+ "source": "https://github.com/ralouphie/getallheaders/tree/develop"
+ },
+ "time": "2019-03-08T08:55:37+00:00"
+ },
+ {
+ "name": "ramsey/collection",
+ "version": "1.2.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/ramsey/collection.git",
+ "reference": "cccc74ee5e328031b15640b51056ee8d3bb66c0a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/ramsey/collection/zipball/cccc74ee5e328031b15640b51056ee8d3bb66c0a",
+ "reference": "cccc74ee5e328031b15640b51056ee8d3bb66c0a",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.3 || ^8",
+ "symfony/polyfill-php81": "^1.23"
+ },
+ "require-dev": {
+ "captainhook/captainhook": "^5.3",
+ "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0",
+ "ergebnis/composer-normalize": "^2.6",
+ "fakerphp/faker": "^1.5",
+ "hamcrest/hamcrest-php": "^2",
+ "jangregor/phpstan-prophecy": "^0.8",
+ "mockery/mockery": "^1.3",
+ "phpspec/prophecy-phpunit": "^2.0",
+ "phpstan/extension-installer": "^1",
+ "phpstan/phpstan": "^0.12.32",
+ "phpstan/phpstan-mockery": "^0.12.5",
+ "phpstan/phpstan-phpunit": "^0.12.11",
+ "phpunit/phpunit": "^8.5 || ^9",
+ "psy/psysh": "^0.10.4",
+ "slevomat/coding-standard": "^6.3",
+ "squizlabs/php_codesniffer": "^3.5",
+ "vimeo/psalm": "^4.4"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Ramsey\\Collection\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Ben Ramsey",
+ "email": "ben@benramsey.com",
+ "homepage": "https://benramsey.com"
+ }
+ ],
+ "description": "A PHP library for representing and manipulating collections.",
+ "keywords": [
+ "array",
+ "collection",
+ "hash",
+ "map",
+ "queue",
+ "set"
+ ],
+ "support": {
+ "issues": "https://github.com/ramsey/collection/issues",
+ "source": "https://github.com/ramsey/collection/tree/1.2.2"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/ramsey",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/ramsey/collection",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-10-10T03:01:02+00:00"
+ },
+ {
+ "name": "ramsey/uuid",
+ "version": "4.2.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/ramsey/uuid.git",
+ "reference": "fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/ramsey/uuid/zipball/fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df",
+ "reference": "fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df",
+ "shasum": ""
+ },
+ "require": {
+ "brick/math": "^0.8 || ^0.9",
+ "ext-json": "*",
+ "php": "^7.2 || ^8.0",
+ "ramsey/collection": "^1.0",
+ "symfony/polyfill-ctype": "^1.8",
+ "symfony/polyfill-php80": "^1.14"
+ },
+ "replace": {
+ "rhumsaa/uuid": "self.version"
+ },
+ "require-dev": {
+ "captainhook/captainhook": "^5.10",
+ "captainhook/plugin-composer": "^5.3",
+ "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0",
+ "doctrine/annotations": "^1.8",
+ "ergebnis/composer-normalize": "^2.15",
+ "mockery/mockery": "^1.3",
+ "moontoast/math": "^1.1",
+ "paragonie/random-lib": "^2",
+ "php-mock/php-mock": "^2.2",
+ "php-mock/php-mock-mockery": "^1.3",
+ "php-parallel-lint/php-parallel-lint": "^1.1",
+ "phpbench/phpbench": "^1.0",
+ "phpstan/extension-installer": "^1.0",
+ "phpstan/phpstan": "^0.12",
+ "phpstan/phpstan-mockery": "^0.12",
+ "phpstan/phpstan-phpunit": "^0.12",
+ "phpunit/phpunit": "^8.5 || ^9",
+ "slevomat/coding-standard": "^7.0",
+ "squizlabs/php_codesniffer": "^3.5",
+ "vimeo/psalm": "^4.9"
+ },
+ "suggest": {
+ "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.",
+ "ext-ctype": "Enables faster processing of character classification using ctype functions.",
+ "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.",
+ "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.",
+ "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter",
+ "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type."
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "4.x-dev"
+ },
+ "captainhook": {
+ "force-install": true
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/functions.php"
+ ],
+ "psr-4": {
+ "Ramsey\\Uuid\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).",
+ "keywords": [
+ "guid",
+ "identifier",
+ "uuid"
+ ],
+ "support": {
+ "issues": "https://github.com/ramsey/uuid/issues",
+ "source": "https://github.com/ramsey/uuid/tree/4.2.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/ramsey",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/ramsey/uuid",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-09-25T23:10:38+00:00"
+ },
+ {
+ "name": "swiftmailer/swiftmailer",
+ "version": "v6.3.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/swiftmailer/swiftmailer.git",
+ "reference": "8a5d5072dca8f48460fce2f4131fcc495eec654c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/8a5d5072dca8f48460fce2f4131fcc495eec654c",
+ "reference": "8a5d5072dca8f48460fce2f4131fcc495eec654c",
+ "shasum": ""
+ },
+ "require": {
+ "egulias/email-validator": "^2.0|^3.1",
+ "php": ">=7.0.0",
+ "symfony/polyfill-iconv": "^1.0",
+ "symfony/polyfill-intl-idn": "^1.10",
+ "symfony/polyfill-mbstring": "^1.0"
+ },
+ "require-dev": {
+ "mockery/mockery": "^1.0",
+ "symfony/phpunit-bridge": "^4.4|^5.4"
+ },
+ "suggest": {
+ "ext-intl": "Needed to support internationalized email addresses"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "6.2-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "lib/swift_required.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Chris Corbyn"
+ },
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ }
+ ],
+ "description": "Swiftmailer, free feature-rich PHP mailer",
+ "homepage": "https://swiftmailer.symfony.com",
+ "keywords": [
+ "email",
+ "mail",
+ "mailer"
+ ],
+ "support": {
+ "issues": "https://github.com/swiftmailer/swiftmailer/issues",
+ "source": "https://github.com/swiftmailer/swiftmailer/tree/v6.3.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/swiftmailer/swiftmailer",
+ "type": "tidelift"
+ }
+ ],
+ "abandoned": "symfony/mailer",
+ "time": "2021-10-18T15:26:12+00:00"
+ },
+ {
+ "name": "symfony/console",
+ "version": "v5.4.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/console.git",
+ "reference": "d8111acc99876953f52fe16d4c50eb60940d49ad"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/console/zipball/d8111acc99876953f52fe16d4c50eb60940d49ad",
+ "reference": "d8111acc99876953f52fe16d4c50eb60940d49ad",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "symfony/deprecation-contracts": "^2.1|^3",
+ "symfony/polyfill-mbstring": "~1.0",
+ "symfony/polyfill-php73": "^1.9",
+ "symfony/polyfill-php80": "^1.16",
+ "symfony/service-contracts": "^1.1|^2|^3",
+ "symfony/string": "^5.1|^6.0"
+ },
+ "conflict": {
+ "psr/log": ">=3",
+ "symfony/dependency-injection": "<4.4",
+ "symfony/dotenv": "<5.1",
+ "symfony/event-dispatcher": "<4.4",
+ "symfony/lock": "<4.4",
+ "symfony/process": "<4.4"
+ },
+ "provide": {
+ "psr/log-implementation": "1.0|2.0"
+ },
+ "require-dev": {
+ "psr/log": "^1|^2",
+ "symfony/config": "^4.4|^5.0|^6.0",
+ "symfony/dependency-injection": "^4.4|^5.0|^6.0",
+ "symfony/event-dispatcher": "^4.4|^5.0|^6.0",
+ "symfony/lock": "^4.4|^5.0|^6.0",
+ "symfony/process": "^4.4|^5.0|^6.0",
+ "symfony/var-dumper": "^4.4|^5.0|^6.0"
+ },
+ "suggest": {
+ "psr/log": "For using the console logger",
+ "symfony/event-dispatcher": "",
+ "symfony/lock": "",
+ "symfony/process": ""
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Console\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Eases the creation of beautiful and testable command line interfaces",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "cli",
+ "command line",
+ "console",
+ "terminal"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/console/tree/v5.4.5"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-02-24T12:45:35+00:00"
+ },
+ {
+ "name": "symfony/css-selector",
+ "version": "v5.4.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/css-selector.git",
+ "reference": "b0a190285cd95cb019237851205b8140ef6e368e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/css-selector/zipball/b0a190285cd95cb019237851205b8140ef6e368e",
+ "reference": "b0a190285cd95cb019237851205b8140ef6e368e",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "symfony/polyfill-php80": "^1.16"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\CssSelector\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Jean-François Simon",
+ "email": "jeanfrancois.simon@sensiolabs.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Converts CSS selectors to XPath expressions",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/css-selector/tree/v5.4.3"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-01-02T09:53:40+00:00"
+ },
+ {
+ "name": "symfony/deprecation-contracts",
+ "version": "v2.5.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/deprecation-contracts.git",
+ "reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/6f981ee24cf69ee7ce9736146d1c57c2780598a8",
+ "reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "2.5-dev"
+ },
+ "thanks": {
+ "name": "symfony/contracts",
+ "url": "https://github.com/symfony/contracts"
+ }
+ },
+ "autoload": {
+ "files": [
+ "function.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "A generic function and convention to trigger deprecation notices",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-07-12T14:48:14+00:00"
+ },
+ {
+ "name": "symfony/error-handler",
+ "version": "v5.4.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/error-handler.git",
+ "reference": "c4ffc2cd919950d13c8c9ce32a70c70214c3ffc5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/error-handler/zipball/c4ffc2cd919950d13c8c9ce32a70c70214c3ffc5",
+ "reference": "c4ffc2cd919950d13c8c9ce32a70c70214c3ffc5",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "psr/log": "^1|^2|^3",
+ "symfony/var-dumper": "^4.4|^5.0|^6.0"
+ },
+ "require-dev": {
+ "symfony/deprecation-contracts": "^2.1|^3",
+ "symfony/http-kernel": "^4.4|^5.0|^6.0",
+ "symfony/serializer": "^4.4|^5.0|^6.0"
+ },
+ "bin": [
+ "Resources/bin/patch-type-declarations"
+ ],
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\ErrorHandler\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Provides tools to manage errors and ease debugging PHP code",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/error-handler/tree/v5.4.3"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-01-02T09:53:40+00:00"
+ },
+ {
+ "name": "symfony/event-dispatcher",
+ "version": "v5.4.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/event-dispatcher.git",
+ "reference": "dec8a9f58d20df252b9cd89f1c6c1530f747685d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/dec8a9f58d20df252b9cd89f1c6c1530f747685d",
+ "reference": "dec8a9f58d20df252b9cd89f1c6c1530f747685d",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "symfony/deprecation-contracts": "^2.1|^3",
+ "symfony/event-dispatcher-contracts": "^2|^3",
+ "symfony/polyfill-php80": "^1.16"
+ },
+ "conflict": {
+ "symfony/dependency-injection": "<4.4"
+ },
+ "provide": {
+ "psr/event-dispatcher-implementation": "1.0",
+ "symfony/event-dispatcher-implementation": "2.0"
+ },
+ "require-dev": {
+ "psr/log": "^1|^2|^3",
+ "symfony/config": "^4.4|^5.0|^6.0",
+ "symfony/dependency-injection": "^4.4|^5.0|^6.0",
+ "symfony/error-handler": "^4.4|^5.0|^6.0",
+ "symfony/expression-language": "^4.4|^5.0|^6.0",
+ "symfony/http-foundation": "^4.4|^5.0|^6.0",
+ "symfony/service-contracts": "^1.1|^2|^3",
+ "symfony/stopwatch": "^4.4|^5.0|^6.0"
+ },
+ "suggest": {
+ "symfony/dependency-injection": "",
+ "symfony/http-kernel": ""
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\EventDispatcher\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "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/v5.4.3"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-01-02T09:53:40+00:00"
+ },
+ {
+ "name": "symfony/event-dispatcher-contracts",
+ "version": "v2.5.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/event-dispatcher-contracts.git",
+ "reference": "66bea3b09be61613cd3b4043a65a8ec48cfa6d2a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/66bea3b09be61613cd3b4043a65a8ec48cfa6d2a",
+ "reference": "66bea3b09be61613cd3b4043a65a8ec48cfa6d2a",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "psr/event-dispatcher": "^1"
+ },
+ "suggest": {
+ "symfony/event-dispatcher-implementation": ""
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "2.5-dev"
+ },
+ "thanks": {
+ "name": "symfony/contracts",
+ "url": "https://github.com/symfony/contracts"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Contracts\\EventDispatcher\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Generic abstractions related to dispatching event",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "abstractions",
+ "contracts",
+ "decoupling",
+ "interfaces",
+ "interoperability",
+ "standards"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.5.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-07-12T14:48:14+00:00"
+ },
+ {
+ "name": "symfony/finder",
+ "version": "v5.4.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/finder.git",
+ "reference": "231313534dded84c7ecaa79d14bc5da4ccb69b7d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/finder/zipball/231313534dded84c7ecaa79d14bc5da4ccb69b7d",
+ "reference": "231313534dded84c7ecaa79d14bc5da4ccb69b7d",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "symfony/deprecation-contracts": "^2.1|^3",
+ "symfony/polyfill-php80": "^1.16"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Finder\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Finds files and directories via an intuitive fluent interface",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/finder/tree/v5.4.3"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-01-26T16:34:36+00:00"
+ },
+ {
+ "name": "symfony/http-foundation",
+ "version": "v5.4.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/http-foundation.git",
+ "reference": "34e89bc147633c0f9dd6caaaf56da3b806a21465"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/http-foundation/zipball/34e89bc147633c0f9dd6caaaf56da3b806a21465",
+ "reference": "34e89bc147633c0f9dd6caaaf56da3b806a21465",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "symfony/deprecation-contracts": "^2.1|^3",
+ "symfony/polyfill-mbstring": "~1.1",
+ "symfony/polyfill-php80": "^1.16"
+ },
+ "require-dev": {
+ "predis/predis": "~1.0",
+ "symfony/cache": "^4.4|^5.0|^6.0",
+ "symfony/expression-language": "^4.4|^5.0|^6.0",
+ "symfony/mime": "^4.4|^5.0|^6.0"
+ },
+ "suggest": {
+ "symfony/mime": "To use the file extension guesser"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\HttpFoundation\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Defines an object-oriented layer for the HTTP specification",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/http-foundation/tree/v5.4.6"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-03-05T21:03:43+00:00"
+ },
+ {
+ "name": "symfony/http-kernel",
+ "version": "v5.4.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/http-kernel.git",
+ "reference": "d41f29ae9af1b5f40c7ebcddf09082953229411d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/http-kernel/zipball/d41f29ae9af1b5f40c7ebcddf09082953229411d",
+ "reference": "d41f29ae9af1b5f40c7ebcddf09082953229411d",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "psr/log": "^1|^2",
+ "symfony/deprecation-contracts": "^2.1|^3",
+ "symfony/error-handler": "^4.4|^5.0|^6.0",
+ "symfony/event-dispatcher": "^5.0|^6.0",
+ "symfony/http-foundation": "^5.3.7|^6.0",
+ "symfony/polyfill-ctype": "^1.8",
+ "symfony/polyfill-php73": "^1.9",
+ "symfony/polyfill-php80": "^1.16"
+ },
+ "conflict": {
+ "symfony/browser-kit": "<5.4",
+ "symfony/cache": "<5.0",
+ "symfony/config": "<5.0",
+ "symfony/console": "<4.4",
+ "symfony/dependency-injection": "<5.3",
+ "symfony/doctrine-bridge": "<5.0",
+ "symfony/form": "<5.0",
+ "symfony/http-client": "<5.0",
+ "symfony/mailer": "<5.0",
+ "symfony/messenger": "<5.0",
+ "symfony/translation": "<5.0",
+ "symfony/twig-bridge": "<5.0",
+ "symfony/validator": "<5.0",
+ "twig/twig": "<2.13"
+ },
+ "provide": {
+ "psr/log-implementation": "1.0|2.0"
+ },
+ "require-dev": {
+ "psr/cache": "^1.0|^2.0|^3.0",
+ "symfony/browser-kit": "^5.4|^6.0",
+ "symfony/config": "^5.0|^6.0",
+ "symfony/console": "^4.4|^5.0|^6.0",
+ "symfony/css-selector": "^4.4|^5.0|^6.0",
+ "symfony/dependency-injection": "^5.3|^6.0",
+ "symfony/dom-crawler": "^4.4|^5.0|^6.0",
+ "symfony/expression-language": "^4.4|^5.0|^6.0",
+ "symfony/finder": "^4.4|^5.0|^6.0",
+ "symfony/http-client-contracts": "^1.1|^2|^3",
+ "symfony/process": "^4.4|^5.0|^6.0",
+ "symfony/routing": "^4.4|^5.0|^6.0",
+ "symfony/stopwatch": "^4.4|^5.0|^6.0",
+ "symfony/translation": "^4.4|^5.0|^6.0",
+ "symfony/translation-contracts": "^1.1|^2|^3",
+ "twig/twig": "^2.13|^3.0.4"
+ },
+ "suggest": {
+ "symfony/browser-kit": "",
+ "symfony/config": "",
+ "symfony/console": "",
+ "symfony/dependency-injection": ""
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\HttpKernel\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Provides a structured process for converting a Request into a Response",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/http-kernel/tree/v5.4.6"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-03-05T21:14:51+00:00"
+ },
+ {
+ "name": "symfony/mime",
+ "version": "v5.4.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/mime.git",
+ "reference": "e1503cfb5c9a225350f549d3bb99296f4abfb80f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/mime/zipball/e1503cfb5c9a225350f549d3bb99296f4abfb80f",
+ "reference": "e1503cfb5c9a225350f549d3bb99296f4abfb80f",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "symfony/deprecation-contracts": "^2.1|^3",
+ "symfony/polyfill-intl-idn": "^1.10",
+ "symfony/polyfill-mbstring": "^1.0",
+ "symfony/polyfill-php80": "^1.16"
+ },
+ "conflict": {
+ "egulias/email-validator": "~3.0.0",
+ "phpdocumentor/reflection-docblock": "<3.2.2",
+ "phpdocumentor/type-resolver": "<1.4.0",
+ "symfony/mailer": "<4.4"
+ },
+ "require-dev": {
+ "egulias/email-validator": "^2.1.10|^3.1",
+ "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0",
+ "symfony/dependency-injection": "^4.4|^5.0|^6.0",
+ "symfony/property-access": "^4.4|^5.1|^6.0",
+ "symfony/property-info": "^4.4|^5.1|^6.0",
+ "symfony/serializer": "^5.2|^6.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Mime\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Allows manipulating MIME messages",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "mime",
+ "mime-type"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/mime/tree/v5.4.3"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-01-02T09:53:40+00:00"
+ },
+ {
+ "name": "symfony/polyfill-ctype",
+ "version": "v1.25.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-ctype.git",
+ "reference": "30885182c981ab175d4d034db0f6f469898070ab"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/30885182c981ab175d4d034db0f6f469898070ab",
+ "reference": "30885182c981ab175d4d034db0f6f469898070ab",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "provide": {
+ "ext-ctype": "*"
+ },
+ "suggest": {
+ "ext-ctype": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.23-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Ctype\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Gert de Pagter",
+ "email": "BackEndTea@gmail.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill for ctype functions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "ctype",
+ "polyfill",
+ "portable"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-ctype/tree/v1.25.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-10-20T20:35:02+00:00"
+ },
+ {
+ "name": "symfony/polyfill-iconv",
+ "version": "v1.25.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-iconv.git",
+ "reference": "f1aed619e28cb077fc83fac8c4c0383578356e40"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/f1aed619e28cb077fc83fac8c4c0383578356e40",
+ "reference": "f1aed619e28cb077fc83fac8c4c0383578356e40",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "provide": {
+ "ext-iconv": "*"
+ },
+ "suggest": {
+ "ext-iconv": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.23-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Iconv\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill for the Iconv extension",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "iconv",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-iconv/tree/v1.25.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-01-04T09:04:05+00:00"
+ },
+ {
+ "name": "symfony/polyfill-intl-grapheme",
+ "version": "v1.25.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-intl-grapheme.git",
+ "reference": "81b86b50cf841a64252b439e738e97f4a34e2783"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/81b86b50cf841a64252b439e738e97f4a34e2783",
+ "reference": "81b86b50cf841a64252b439e738e97f4a34e2783",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "suggest": {
+ "ext-intl": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.23-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Intl\\Grapheme\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill for intl's grapheme_* functions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "grapheme",
+ "intl",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.25.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-11-23T21:10:46+00:00"
+ },
+ {
+ "name": "symfony/polyfill-intl-idn",
+ "version": "v1.25.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-intl-idn.git",
+ "reference": "749045c69efb97c70d25d7463abba812e91f3a44"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/749045c69efb97c70d25d7463abba812e91f3a44",
+ "reference": "749045c69efb97c70d25d7463abba812e91f3a44",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1",
+ "symfony/polyfill-intl-normalizer": "^1.10",
+ "symfony/polyfill-php72": "^1.10"
+ },
+ "suggest": {
+ "ext-intl": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.23-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Intl\\Idn\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Laurent Bassin",
+ "email": "laurent@bassin.info"
+ },
+ {
+ "name": "Trevor Rowbotham",
+ "email": "trevor.rowbotham@pm.me"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "idn",
+ "intl",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.25.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-09-14T14:02:44+00:00"
+ },
+ {
+ "name": "symfony/polyfill-intl-normalizer",
+ "version": "v1.25.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-intl-normalizer.git",
+ "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8590a5f561694770bdcd3f9b5c69dde6945028e8",
+ "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "suggest": {
+ "ext-intl": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.23-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Intl\\Normalizer\\": ""
+ },
+ "classmap": [
+ "Resources/stubs"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill for intl's Normalizer class and related functions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "intl",
+ "normalizer",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.25.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-02-19T12:13:01+00:00"
+ },
+ {
+ "name": "symfony/polyfill-mbstring",
+ "version": "v1.25.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-mbstring.git",
+ "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/0abb51d2f102e00a4eefcf46ba7fec406d245825",
+ "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "provide": {
+ "ext-mbstring": "*"
+ },
+ "suggest": {
+ "ext-mbstring": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.23-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Mbstring\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill for the Mbstring extension",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "mbstring",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.25.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-11-30T18:21:41+00:00"
+ },
+ {
+ "name": "symfony/polyfill-php72",
+ "version": "v1.25.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php72.git",
+ "reference": "9a142215a36a3888e30d0a9eeea9766764e96976"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/9a142215a36a3888e30d0a9eeea9766764e96976",
+ "reference": "9a142215a36a3888e30d0a9eeea9766764e96976",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.23-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Php72\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-php72/tree/v1.25.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-05-27T09:17:38+00:00"
+ },
+ {
+ "name": "symfony/polyfill-php73",
+ "version": "v1.25.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php73.git",
+ "reference": "cc5db0e22b3cb4111010e48785a97f670b350ca5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/cc5db0e22b3cb4111010e48785a97f670b350ca5",
+ "reference": "cc5db0e22b3cb4111010e48785a97f670b350ca5",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.23-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Php73\\": ""
+ },
+ "classmap": [
+ "Resources/stubs"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-php73/tree/v1.25.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-06-05T21:20:04+00:00"
+ },
+ {
+ "name": "symfony/polyfill-php80",
+ "version": "v1.25.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php80.git",
+ "reference": "4407588e0d3f1f52efb65fbe92babe41f37fe50c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/4407588e0d3f1f52efb65fbe92babe41f37fe50c",
+ "reference": "4407588e0d3f1f52efb65fbe92babe41f37fe50c",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.23-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Php80\\": ""
+ },
+ "classmap": [
+ "Resources/stubs"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Ion Bazan",
+ "email": "ion.bazan@gmail.com"
+ },
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-php80/tree/v1.25.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-03-04T08:16:47+00:00"
+ },
+ {
+ "name": "symfony/polyfill-php81",
+ "version": "v1.25.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php81.git",
+ "reference": "5de4ba2d41b15f9bd0e19b2ab9674135813ec98f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/5de4ba2d41b15f9bd0e19b2ab9674135813ec98f",
+ "reference": "5de4ba2d41b15f9bd0e19b2ab9674135813ec98f",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.23-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Php81\\": ""
+ },
+ "classmap": [
+ "Resources/stubs"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-php81/tree/v1.25.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-09-13T13:58:11+00:00"
+ },
+ {
+ "name": "symfony/process",
+ "version": "v5.4.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/process.git",
+ "reference": "95440409896f90a5f85db07a32b517ecec17fa4c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/process/zipball/95440409896f90a5f85db07a32b517ecec17fa4c",
+ "reference": "95440409896f90a5f85db07a32b517ecec17fa4c",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "symfony/polyfill-php80": "^1.16"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Process\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Executes commands in sub-processes",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/process/tree/v5.4.5"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-01-30T18:16:22+00:00"
+ },
+ {
+ "name": "symfony/routing",
+ "version": "v5.4.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/routing.git",
+ "reference": "44b29c7a94e867ccde1da604792f11a469958981"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/routing/zipball/44b29c7a94e867ccde1da604792f11a469958981",
+ "reference": "44b29c7a94e867ccde1da604792f11a469958981",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "symfony/deprecation-contracts": "^2.1|^3",
+ "symfony/polyfill-php80": "^1.16"
+ },
+ "conflict": {
+ "doctrine/annotations": "<1.12",
+ "symfony/config": "<5.3",
+ "symfony/dependency-injection": "<4.4",
+ "symfony/yaml": "<4.4"
+ },
+ "require-dev": {
+ "doctrine/annotations": "^1.12",
+ "psr/log": "^1|^2|^3",
+ "symfony/config": "^5.3|^6.0",
+ "symfony/dependency-injection": "^4.4|^5.0|^6.0",
+ "symfony/expression-language": "^4.4|^5.0|^6.0",
+ "symfony/http-foundation": "^4.4|^5.0|^6.0",
+ "symfony/yaml": "^4.4|^5.0|^6.0"
+ },
+ "suggest": {
+ "symfony/config": "For using the all-in-one router or any loader",
+ "symfony/expression-language": "For using expression matching",
+ "symfony/http-foundation": "For using a Symfony Request object",
+ "symfony/yaml": "For using the YAML loader"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Routing\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Maps an HTTP request to a set of configuration variables",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "router",
+ "routing",
+ "uri",
+ "url"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/routing/tree/v5.4.3"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-01-02T09:53:40+00:00"
+ },
+ {
+ "name": "symfony/service-contracts",
+ "version": "v2.5.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/service-contracts.git",
+ "reference": "1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/service-contracts/zipball/1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc",
+ "reference": "1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "psr/container": "^1.1",
+ "symfony/deprecation-contracts": "^2.1"
+ },
+ "conflict": {
+ "ext-psr": "<1.1|>=2"
+ },
+ "suggest": {
+ "symfony/service-implementation": ""
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "2.5-dev"
+ },
+ "thanks": {
+ "name": "symfony/contracts",
+ "url": "https://github.com/symfony/contracts"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Contracts\\Service\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Generic abstractions related to writing services",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "abstractions",
+ "contracts",
+ "decoupling",
+ "interfaces",
+ "interoperability",
+ "standards"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/service-contracts/tree/v2.5.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-11-04T16:48:04+00:00"
+ },
+ {
+ "name": "symfony/string",
+ "version": "v5.4.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/string.git",
+ "reference": "92043b7d8383e48104e411bc9434b260dbeb5a10"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/string/zipball/92043b7d8383e48104e411bc9434b260dbeb5a10",
+ "reference": "92043b7d8383e48104e411bc9434b260dbeb5a10",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "symfony/polyfill-ctype": "~1.8",
+ "symfony/polyfill-intl-grapheme": "~1.0",
+ "symfony/polyfill-intl-normalizer": "~1.0",
+ "symfony/polyfill-mbstring": "~1.0",
+ "symfony/polyfill-php80": "~1.15"
+ },
+ "conflict": {
+ "symfony/translation-contracts": ">=3.0"
+ },
+ "require-dev": {
+ "symfony/error-handler": "^4.4|^5.0|^6.0",
+ "symfony/http-client": "^4.4|^5.0|^6.0",
+ "symfony/translation-contracts": "^1.1|^2",
+ "symfony/var-exporter": "^4.4|^5.0|^6.0"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "Resources/functions.php"
+ ],
+ "psr-4": {
+ "Symfony\\Component\\String\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "grapheme",
+ "i18n",
+ "string",
+ "unicode",
+ "utf-8",
+ "utf8"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/string/tree/v5.4.3"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-01-02T09:53:40+00:00"
+ },
+ {
+ "name": "symfony/translation",
+ "version": "v5.4.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/translation.git",
+ "reference": "a7ca9fdfffb0174209440c2ffa1dee228e15d95b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/translation/zipball/a7ca9fdfffb0174209440c2ffa1dee228e15d95b",
+ "reference": "a7ca9fdfffb0174209440c2ffa1dee228e15d95b",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "symfony/deprecation-contracts": "^2.1|^3",
+ "symfony/polyfill-mbstring": "~1.0",
+ "symfony/polyfill-php80": "^1.16",
+ "symfony/translation-contracts": "^2.3"
+ },
+ "conflict": {
+ "symfony/config": "<4.4",
+ "symfony/console": "<5.3",
+ "symfony/dependency-injection": "<5.0",
+ "symfony/http-kernel": "<5.0",
+ "symfony/twig-bundle": "<5.0",
+ "symfony/yaml": "<4.4"
+ },
+ "provide": {
+ "symfony/translation-implementation": "2.3"
+ },
+ "require-dev": {
+ "psr/log": "^1|^2|^3",
+ "symfony/config": "^4.4|^5.0|^6.0",
+ "symfony/console": "^5.4|^6.0",
+ "symfony/dependency-injection": "^5.0|^6.0",
+ "symfony/finder": "^4.4|^5.0|^6.0",
+ "symfony/http-client-contracts": "^1.1|^2.0|^3.0",
+ "symfony/http-kernel": "^5.0|^6.0",
+ "symfony/intl": "^4.4|^5.0|^6.0",
+ "symfony/polyfill-intl-icu": "^1.21",
+ "symfony/service-contracts": "^1.1.2|^2|^3",
+ "symfony/yaml": "^4.4|^5.0|^6.0"
+ },
+ "suggest": {
+ "psr/log-implementation": "To use logging capability in translator",
+ "symfony/config": "",
+ "symfony/yaml": ""
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "Resources/functions.php"
+ ],
+ "psr-4": {
+ "Symfony\\Component\\Translation\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Provides tools to internationalize your application",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/translation/tree/v5.4.6"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-03-02T12:56:28+00:00"
+ },
+ {
+ "name": "symfony/translation-contracts",
+ "version": "v2.5.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/translation-contracts.git",
+ "reference": "d28150f0f44ce854e942b671fc2620a98aae1b1e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/d28150f0f44ce854e942b671fc2620a98aae1b1e",
+ "reference": "d28150f0f44ce854e942b671fc2620a98aae1b1e",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5"
+ },
+ "suggest": {
+ "symfony/translation-implementation": ""
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "2.5-dev"
+ },
+ "thanks": {
+ "name": "symfony/contracts",
+ "url": "https://github.com/symfony/contracts"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Contracts\\Translation\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Generic abstractions related to translation",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "abstractions",
+ "contracts",
+ "decoupling",
+ "interfaces",
+ "interoperability",
+ "standards"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/translation-contracts/tree/v2.5.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-08-17T14:20:01+00:00"
+ },
+ {
+ "name": "symfony/var-dumper",
+ "version": "v5.4.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/var-dumper.git",
+ "reference": "294e9da6e2e0dd404e983daa5aa74253d92c05d0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/var-dumper/zipball/294e9da6e2e0dd404e983daa5aa74253d92c05d0",
+ "reference": "294e9da6e2e0dd404e983daa5aa74253d92c05d0",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "symfony/polyfill-mbstring": "~1.0",
+ "symfony/polyfill-php80": "^1.16"
+ },
+ "conflict": {
+ "phpunit/phpunit": "<5.4.3",
+ "symfony/console": "<4.4"
+ },
+ "require-dev": {
+ "ext-iconv": "*",
+ "symfony/console": "^4.4|^5.0|^6.0",
+ "symfony/process": "^4.4|^5.0|^6.0",
+ "symfony/uid": "^5.1|^6.0",
+ "twig/twig": "^2.13|^3.0.4"
+ },
+ "suggest": {
+ "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).",
+ "ext-intl": "To show region name in time zone dump",
+ "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script"
+ },
+ "bin": [
+ "Resources/bin/var-dump-server"
+ ],
+ "type": "library",
+ "autoload": {
+ "files": [
+ "Resources/functions/dump.php"
+ ],
+ "psr-4": {
+ "Symfony\\Component\\VarDumper\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Provides mechanisms for walking through any arbitrary PHP variable",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "debug",
+ "dump"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/var-dumper/tree/v5.4.6"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-03-02T12:42:23+00:00"
+ },
+ {
+ "name": "tijsverkoyen/css-to-inline-styles",
+ "version": "2.2.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git",
+ "reference": "da444caae6aca7a19c0c140f68c6182e337d5b1c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/da444caae6aca7a19c0c140f68c6182e337d5b1c",
+ "reference": "da444caae6aca7a19c0c140f68c6182e337d5b1c",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-libxml": "*",
+ "php": "^5.5 || ^7.0 || ^8.0",
+ "symfony/css-selector": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^7.5 || ^8.5.21 || ^9.5.10"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.2.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "TijsVerkoyen\\CssToInlineStyles\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Tijs Verkoyen",
+ "email": "css_to_inline_styles@verkoyen.eu",
+ "role": "Developer"
+ }
+ ],
+ "description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.",
+ "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles",
+ "support": {
+ "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues",
+ "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/2.2.4"
+ },
+ "time": "2021-12-08T09:12:39+00:00"
+ },
+ {
+ "name": "vlucas/phpdotenv",
+ "version": "v5.4.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/vlucas/phpdotenv.git",
+ "reference": "264dce589e7ce37a7ba99cb901eed8249fbec92f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/264dce589e7ce37a7ba99cb901eed8249fbec92f",
+ "reference": "264dce589e7ce37a7ba99cb901eed8249fbec92f",
+ "shasum": ""
+ },
+ "require": {
+ "ext-pcre": "*",
+ "graham-campbell/result-type": "^1.0.2",
+ "php": "^7.1.3 || ^8.0",
+ "phpoption/phpoption": "^1.8",
+ "symfony/polyfill-ctype": "^1.23",
+ "symfony/polyfill-mbstring": "^1.23.1",
+ "symfony/polyfill-php80": "^1.23.1"
+ },
+ "require-dev": {
+ "bamarni/composer-bin-plugin": "^1.4.1",
+ "ext-filter": "*",
+ "phpunit/phpunit": "^7.5.20 || ^8.5.21 || ^9.5.10"
+ },
+ "suggest": {
+ "ext-filter": "Required to use the boolean validator."
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "5.4-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Dotenv\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Graham Campbell",
+ "email": "hello@gjcampbell.co.uk",
+ "homepage": "https://github.com/GrahamCampbell"
+ },
+ {
+ "name": "Vance Lucas",
+ "email": "vance@vancelucas.com",
+ "homepage": "https://github.com/vlucas"
+ }
+ ],
+ "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.",
+ "keywords": [
+ "dotenv",
+ "env",
+ "environment"
+ ],
+ "support": {
+ "issues": "https://github.com/vlucas/phpdotenv/issues",
+ "source": "https://github.com/vlucas/phpdotenv/tree/v5.4.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/GrahamCampbell",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-12-12T23:22:04+00:00"
+ },
+ {
+ "name": "voku/portable-ascii",
+ "version": "1.6.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/voku/portable-ascii.git",
+ "reference": "87337c91b9dfacee02452244ee14ab3c43bc485a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/voku/portable-ascii/zipball/87337c91b9dfacee02452244ee14ab3c43bc485a",
+ "reference": "87337c91b9dfacee02452244ee14ab3c43bc485a",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.0.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0"
+ },
+ "suggest": {
+ "ext-intl": "Use Intl for transliterator_transliterate() support"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "voku\\": "src/voku/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Lars Moelleken",
+ "homepage": "http://www.moelleken.org/"
+ }
+ ],
+ "description": "Portable ASCII library - performance optimized (ascii) string functions for php.",
+ "homepage": "https://github.com/voku/portable-ascii",
+ "keywords": [
+ "ascii",
+ "clean",
+ "php"
+ ],
+ "support": {
+ "issues": "https://github.com/voku/portable-ascii/issues",
+ "source": "https://github.com/voku/portable-ascii/tree/1.6.1"
+ },
+ "funding": [
+ {
+ "url": "https://www.paypal.me/moelleken",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/voku",
+ "type": "github"
+ },
+ {
+ "url": "https://opencollective.com/portable-ascii",
+ "type": "open_collective"
+ },
+ {
+ "url": "https://www.patreon.com/voku",
+ "type": "patreon"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/voku/portable-ascii",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-01-24T18:55:24+00:00"
+ },
+ {
+ "name": "webmozart/assert",
+ "version": "1.10.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/webmozarts/assert.git",
+ "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25",
+ "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2 || ^8.0",
+ "symfony/polyfill-ctype": "^1.8"
+ },
+ "conflict": {
+ "phpstan/phpstan": "<0.12.20",
+ "vimeo/psalm": "<4.6.1 || 4.6.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^8.5.13"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.10-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Webmozart\\Assert\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Bernhard Schussek",
+ "email": "bschussek@gmail.com"
+ }
+ ],
+ "description": "Assertions to validate method input/output with nice error messages.",
+ "keywords": [
+ "assert",
+ "check",
+ "validate"
+ ],
+ "support": {
+ "issues": "https://github.com/webmozarts/assert/issues",
+ "source": "https://github.com/webmozarts/assert/tree/1.10.0"
+ },
+ "time": "2021-03-09T10:59:23+00:00"
+ }
+ ],
+ "packages-dev": [
+ {
+ "name": "doctrine/instantiator",
+ "version": "1.4.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/instantiator.git",
+ "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/instantiator/zipball/10dcfce151b967d20fde1b34ae6640712c3891bc",
+ "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1 || ^8.0"
+ },
+ "require-dev": {
+ "doctrine/coding-standard": "^9",
+ "ext-pdo": "*",
+ "ext-phar": "*",
+ "phpbench/phpbench": "^0.16 || ^1",
+ "phpstan/phpstan": "^1.4",
+ "phpstan/phpstan-phpunit": "^1",
+ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
+ "vimeo/psalm": "^4.22"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Marco Pivetta",
+ "email": "ocramius@gmail.com",
+ "homepage": "https://ocramius.github.io/"
+ }
+ ],
+ "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
+ "homepage": "https://www.doctrine-project.org/projects/instantiator.html",
+ "keywords": [
+ "constructor",
+ "instantiate"
+ ],
+ "support": {
+ "issues": "https://github.com/doctrine/instantiator/issues",
+ "source": "https://github.com/doctrine/instantiator/tree/1.4.1"
+ },
+ "funding": [
+ {
+ "url": "https://www.doctrine-project.org/sponsorship.html",
+ "type": "custom"
+ },
+ {
+ "url": "https://www.patreon.com/phpdoctrine",
+ "type": "patreon"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-03-03T08:28:38+00:00"
+ },
+ {
+ "name": "erusev/parsedown",
+ "version": "1.7.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/erusev/parsedown.git",
+ "reference": "cb17b6477dfff935958ba01325f2e8a2bfa6dab3"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/erusev/parsedown/zipball/cb17b6477dfff935958ba01325f2e8a2bfa6dab3",
+ "reference": "cb17b6477dfff935958ba01325f2e8a2bfa6dab3",
+ "shasum": ""
+ },
+ "require": {
+ "ext-mbstring": "*",
+ "php": ">=5.3.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^4.8.35"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-0": {
+ "Parsedown": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Emanuil Rusev",
+ "email": "hello@erusev.com",
+ "homepage": "http://erusev.com"
+ }
+ ],
+ "description": "Parser for Markdown.",
+ "homepage": "http://parsedown.org",
+ "keywords": [
+ "markdown",
+ "parser"
+ ],
+ "support": {
+ "issues": "https://github.com/erusev/parsedown/issues",
+ "source": "https://github.com/erusev/parsedown/tree/1.7.x"
+ },
+ "time": "2019-12-30T22:54:17+00:00"
+ },
+ {
+ "name": "facade/flare-client-php",
+ "version": "1.9.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/facade/flare-client-php.git",
+ "reference": "b2adf1512755637d0cef4f7d1b54301325ac78ed"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/facade/flare-client-php/zipball/b2adf1512755637d0cef4f7d1b54301325ac78ed",
+ "reference": "b2adf1512755637d0cef4f7d1b54301325ac78ed",
+ "shasum": ""
+ },
+ "require": {
+ "facade/ignition-contracts": "~1.0",
+ "illuminate/pipeline": "^5.5|^6.0|^7.0|^8.0",
+ "php": "^7.1|^8.0",
+ "symfony/http-foundation": "^3.3|^4.1|^5.0",
+ "symfony/mime": "^3.4|^4.0|^5.1",
+ "symfony/var-dumper": "^3.4|^4.0|^5.0"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "^2.14",
+ "phpunit/phpunit": "^7.5.16",
+ "spatie/phpunit-snapshot-assertions": "^2.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/helpers.php"
+ ],
+ "psr-4": {
+ "Facade\\FlareClient\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Send PHP errors to Flare",
+ "homepage": "https://github.com/facade/flare-client-php",
+ "keywords": [
+ "exception",
+ "facade",
+ "flare",
+ "reporting"
+ ],
+ "support": {
+ "issues": "https://github.com/facade/flare-client-php/issues",
+ "source": "https://github.com/facade/flare-client-php/tree/1.9.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/spatie",
+ "type": "github"
+ }
+ ],
+ "time": "2021-09-13T12:16:46+00:00"
+ },
+ {
+ "name": "facade/ignition",
+ "version": "2.17.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/facade/ignition.git",
+ "reference": "1d71996f83c9a5a7807331b8986ac890352b7a0c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/facade/ignition/zipball/1d71996f83c9a5a7807331b8986ac890352b7a0c",
+ "reference": "1d71996f83c9a5a7807331b8986ac890352b7a0c",
+ "shasum": ""
+ },
+ "require": {
+ "ext-curl": "*",
+ "ext-json": "*",
+ "ext-mbstring": "*",
+ "facade/flare-client-php": "^1.9.1",
+ "facade/ignition-contracts": "^1.0.2",
+ "illuminate/support": "^7.0|^8.0",
+ "monolog/monolog": "^2.0",
+ "php": "^7.2.5|^8.0",
+ "symfony/console": "^5.0",
+ "symfony/var-dumper": "^5.0"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "^2.14",
+ "livewire/livewire": "^2.4",
+ "mockery/mockery": "^1.3",
+ "orchestra/testbench": "^5.0|^6.0",
+ "psalm/plugin-laravel": "^1.2"
+ },
+ "suggest": {
+ "laravel/telescope": "^3.1"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.x-dev"
+ },
+ "laravel": {
+ "providers": [
+ "Facade\\Ignition\\IgnitionServiceProvider"
+ ],
+ "aliases": {
+ "Flare": "Facade\\Ignition\\Facades\\Flare"
+ }
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/helpers.php"
+ ],
+ "psr-4": {
+ "Facade\\Ignition\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "A beautiful error page for Laravel applications.",
+ "homepage": "https://github.com/facade/ignition",
+ "keywords": [
+ "error",
+ "flare",
+ "laravel",
+ "page"
+ ],
+ "support": {
+ "docs": "https://flareapp.io/docs/ignition-for-laravel/introduction",
+ "forum": "https://twitter.com/flareappio",
+ "issues": "https://github.com/facade/ignition/issues",
+ "source": "https://github.com/facade/ignition"
+ },
+ "time": "2022-02-23T18:31:24+00:00"
+ },
+ {
+ "name": "facade/ignition-contracts",
+ "version": "1.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/facade/ignition-contracts.git",
+ "reference": "3c921a1cdba35b68a7f0ccffc6dffc1995b18267"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/facade/ignition-contracts/zipball/3c921a1cdba35b68a7f0ccffc6dffc1995b18267",
+ "reference": "3c921a1cdba35b68a7f0ccffc6dffc1995b18267",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.3|^8.0"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "^v2.15.8",
+ "phpunit/phpunit": "^9.3.11",
+ "vimeo/psalm": "^3.17.1"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Facade\\IgnitionContracts\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Freek Van der Herten",
+ "email": "freek@spatie.be",
+ "homepage": "https://flareapp.io",
+ "role": "Developer"
+ }
+ ],
+ "description": "Solution contracts for Ignition",
+ "homepage": "https://github.com/facade/ignition-contracts",
+ "keywords": [
+ "contracts",
+ "flare",
+ "ignition"
+ ],
+ "support": {
+ "issues": "https://github.com/facade/ignition-contracts/issues",
+ "source": "https://github.com/facade/ignition-contracts/tree/1.0.2"
+ },
+ "time": "2020-10-16T08:27:54+00:00"
+ },
+ {
+ "name": "fakerphp/faker",
+ "version": "v1.19.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/FakerPHP/Faker.git",
+ "reference": "d7f08a622b3346766325488aa32ddc93ccdecc75"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/d7f08a622b3346766325488aa32ddc93ccdecc75",
+ "reference": "d7f08a622b3346766325488aa32ddc93ccdecc75",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1 || ^8.0",
+ "psr/container": "^1.0 || ^2.0",
+ "symfony/deprecation-contracts": "^2.2 || ^3.0"
+ },
+ "conflict": {
+ "fzaninotto/faker": "*"
+ },
+ "require-dev": {
+ "bamarni/composer-bin-plugin": "^1.4.1",
+ "doctrine/persistence": "^1.3 || ^2.0",
+ "ext-intl": "*",
+ "symfony/phpunit-bridge": "^4.4 || ^5.2"
+ },
+ "suggest": {
+ "doctrine/orm": "Required to use Faker\\ORM\\Doctrine",
+ "ext-curl": "Required by Faker\\Provider\\Image to download images.",
+ "ext-dom": "Required by Faker\\Provider\\HtmlLorem for generating random HTML.",
+ "ext-iconv": "Required by Faker\\Provider\\ru_RU\\Text::realText() for generating real Russian text.",
+ "ext-mbstring": "Required for multibyte Unicode string functionality."
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "v1.19-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Faker\\": "src/Faker/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "François Zaninotto"
+ }
+ ],
+ "description": "Faker is a PHP library that generates fake data for you.",
+ "keywords": [
+ "data",
+ "faker",
+ "fixtures"
+ ],
+ "support": {
+ "issues": "https://github.com/FakerPHP/Faker/issues",
+ "source": "https://github.com/FakerPHP/Faker/tree/v1.19.0"
+ },
+ "time": "2022-02-02T17:38:57+00:00"
+ },
+ {
+ "name": "filp/whoops",
+ "version": "2.14.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/filp/whoops.git",
+ "reference": "a63e5e8f26ebbebf8ed3c5c691637325512eb0dc"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/filp/whoops/zipball/a63e5e8f26ebbebf8ed3c5c691637325512eb0dc",
+ "reference": "a63e5e8f26ebbebf8ed3c5c691637325512eb0dc",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.5.9 || ^7.0 || ^8.0",
+ "psr/log": "^1.0.1 || ^2.0 || ^3.0"
+ },
+ "require-dev": {
+ "mockery/mockery": "^0.9 || ^1.0",
+ "phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.3",
+ "symfony/var-dumper": "^2.6 || ^3.0 || ^4.0 || ^5.0"
+ },
+ "suggest": {
+ "symfony/var-dumper": "Pretty print complex values better with var-dumper available",
+ "whoops/soap": "Formats errors as SOAP responses"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.7-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Whoops\\": "src/Whoops/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Filipe Dobreira",
+ "homepage": "https://github.com/filp",
+ "role": "Developer"
+ }
+ ],
+ "description": "php error handling for cool kids",
+ "homepage": "https://filp.github.io/whoops/",
+ "keywords": [
+ "error",
+ "exception",
+ "handling",
+ "library",
+ "throwable",
+ "whoops"
+ ],
+ "support": {
+ "issues": "https://github.com/filp/whoops/issues",
+ "source": "https://github.com/filp/whoops/tree/2.14.5"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/denis-sokolov",
+ "type": "github"
+ }
+ ],
+ "time": "2022-01-07T12:00:00+00:00"
+ },
+ {
+ "name": "hamcrest/hamcrest-php",
+ "version": "v2.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/hamcrest/hamcrest-php.git",
+ "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3",
+ "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.3|^7.0|^8.0"
+ },
+ "replace": {
+ "cordoval/hamcrest-php": "*",
+ "davedevelopment/hamcrest-php": "*",
+ "kodova/hamcrest-php": "*"
+ },
+ "require-dev": {
+ "phpunit/php-file-iterator": "^1.4 || ^2.0",
+ "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.1-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "hamcrest"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "description": "This is the PHP port of Hamcrest Matchers",
+ "keywords": [
+ "test"
+ ],
+ "support": {
+ "issues": "https://github.com/hamcrest/hamcrest-php/issues",
+ "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1"
+ },
+ "time": "2020-07-09T08:09:16+00:00"
+ },
+ {
+ "name": "knuckleswtf/scribe",
+ "version": "3.24.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/knuckleswtf/scribe.git",
+ "reference": "37165616dc373023b9b57bdffab037d1b9e1c41a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/knuckleswtf/scribe/zipball/37165616dc373023b9b57bdffab037d1b9e1c41a",
+ "reference": "37165616dc373023b9b57bdffab037d1b9e1c41a",
+ "shasum": ""
+ },
+ "require": {
+ "erusev/parsedown": "1.7.4",
+ "ext-fileinfo": "*",
+ "ext-json": "*",
+ "ext-pdo": "*",
+ "fakerphp/faker": "^1.9.1",
+ "illuminate/console": "^6.0|^7.0|^8.0|^9.0",
+ "illuminate/routing": "^6.0|^7.0|^8.0|^9.0",
+ "illuminate/support": "^6.0|^7.0|^8.0|^9.0",
+ "league/flysystem": "^1.1.4|^2.1.1|^3.0",
+ "mpociot/reflection-docblock": "^1.0.1",
+ "nikic/php-parser": "^4.10",
+ "nunomaduro/collision": "^3.0|^4.0|^5.0|^6.0",
+ "php": ">=7.4",
+ "ramsey/uuid": "^3.8|^4.0",
+ "shalvah/clara": "^3.1.0",
+ "shalvah/upgrader": "0.*",
+ "spatie/data-transfer-object": "^2.6|^3.0",
+ "symfony/var-exporter": "^4.0|^5.0|^6.0",
+ "symfony/yaml": "^4.0|^5.0|^6.0"
+ },
+ "replace": {
+ "mpociot/laravel-apidoc-generator": "*"
+ },
+ "require-dev": {
+ "brianium/paratest": "^6.0",
+ "dms/phpunit-arraysubset-asserts": "^0.2.0",
+ "laravel/legacy-factories": "^1.3.0",
+ "laravel/lumen-framework": "^6.0|^7.0|^8.0|^9.0",
+ "league/fractal": "^0.19.0",
+ "nikic/fast-route": "^1.3",
+ "orchestra/testbench": "^4.0|^5.0|^6.0|^7.0",
+ "pestphp/pest": "^1.21",
+ "phpstan/phpstan": "^1.0",
+ "phpunit/phpunit": "^9.0|^10.0",
+ "symfony/css-selector": "^5.3|^6.0",
+ "symfony/dom-crawler": "^5.3|^6.0"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "Knuckles\\Scribe\\ScribeServiceProvider"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Knuckles\\Camel\\": "camel/",
+ "Knuckles\\Scribe\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Shalvah",
+ "email": "hello@shalvah.me"
+ }
+ ],
+ "description": "Generate API documentation for humans from your Laravel codebase.✍",
+ "homepage": "http://github.com/knuckleswtf/scribe",
+ "keywords": [
+ "api",
+ "dingo",
+ "documentation",
+ "laravel"
+ ],
+ "support": {
+ "issues": "https://github.com/knuckleswtf/scribe/issues",
+ "source": "https://github.com/knuckleswtf/scribe/tree/3.24.1"
+ },
+ "funding": [
+ {
+ "url": "https://patreon.com/shalvah",
+ "type": "patreon"
+ }
+ ],
+ "time": "2022-03-07T08:57:49+00:00"
+ },
+ {
+ "name": "laravel/sail",
+ "version": "v1.13.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/laravel/sail.git",
+ "reference": "6205041336b09b965af1d6af29261584e787bf52"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/laravel/sail/zipball/6205041336b09b965af1d6af29261584e787bf52",
+ "reference": "6205041336b09b965af1d6af29261584e787bf52",
+ "shasum": ""
+ },
+ "require": {
+ "illuminate/console": "^8.0|^9.0",
+ "illuminate/contracts": "^8.0|^9.0",
+ "illuminate/support": "^8.0|^9.0",
+ "php": "^7.3|^8.0"
+ },
+ "bin": [
+ "bin/sail"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.x-dev"
+ },
+ "laravel": {
+ "providers": [
+ "Laravel\\Sail\\SailServiceProvider"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Laravel\\Sail\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Taylor Otwell",
+ "email": "taylor@laravel.com"
+ }
+ ],
+ "description": "Docker files for running a basic Laravel application.",
+ "keywords": [
+ "docker",
+ "laravel"
+ ],
+ "support": {
+ "issues": "https://github.com/laravel/sail/issues",
+ "source": "https://github.com/laravel/sail"
+ },
+ "time": "2022-03-07T15:35:47+00:00"
+ },
+ {
+ "name": "mockery/mockery",
+ "version": "1.5.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/mockery/mockery.git",
+ "reference": "c10a5f6e06fc2470ab1822fa13fa2a7380f8fbac"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/mockery/mockery/zipball/c10a5f6e06fc2470ab1822fa13fa2a7380f8fbac",
+ "reference": "c10a5f6e06fc2470ab1822fa13fa2a7380f8fbac",
+ "shasum": ""
+ },
+ "require": {
+ "hamcrest/hamcrest-php": "^2.0.1",
+ "lib-pcre": ">=7.0",
+ "php": "^7.3 || ^8.0"
+ },
+ "conflict": {
+ "phpunit/phpunit": "<8.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^8.5 || ^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.4.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-0": {
+ "Mockery": "library/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Pádraic Brady",
+ "email": "padraic.brady@gmail.com",
+ "homepage": "http://blog.astrumfutura.com"
+ },
+ {
+ "name": "Dave Marshall",
+ "email": "dave.marshall@atstsolutions.co.uk",
+ "homepage": "http://davedevelopment.co.uk"
+ }
+ ],
+ "description": "Mockery is a simple yet flexible PHP mock object framework",
+ "homepage": "https://github.com/mockery/mockery",
+ "keywords": [
+ "BDD",
+ "TDD",
+ "library",
+ "mock",
+ "mock objects",
+ "mockery",
+ "stub",
+ "test",
+ "test double",
+ "testing"
+ ],
+ "support": {
+ "issues": "https://github.com/mockery/mockery/issues",
+ "source": "https://github.com/mockery/mockery/tree/1.5.0"
+ },
+ "time": "2022-01-20T13:18:17+00:00"
+ },
+ {
+ "name": "mpociot/reflection-docblock",
+ "version": "1.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/mpociot/reflection-docblock.git",
+ "reference": "c8b2e2b1f5cebbb06e2b5ccbf2958f2198867587"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/mpociot/reflection-docblock/zipball/c8b2e2b1f5cebbb06e2b5ccbf2958f2198867587",
+ "reference": "c8b2e2b1f5cebbb06e2b5ccbf2958f2198867587",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.0"
+ },
+ "suggest": {
+ "dflydev/markdown": "~1.0",
+ "erusev/parsedown": "~1.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-0": {
+ "Mpociot": [
+ "src/"
+ ]
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Mike van Riel",
+ "email": "mike.vanriel@naenius.com"
+ }
+ ],
+ "support": {
+ "issues": "https://github.com/mpociot/reflection-docblock/issues",
+ "source": "https://github.com/mpociot/reflection-docblock/tree/master"
+ },
+ "time": "2016-06-20T20:53:12+00:00"
+ },
+ {
+ "name": "myclabs/deep-copy",
+ "version": "1.11.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/myclabs/DeepCopy.git",
+ "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614",
+ "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1 || ^8.0"
+ },
+ "conflict": {
+ "doctrine/collections": "<1.6.8",
+ "doctrine/common": "<2.13.3 || >=3,<3.2.2"
+ },
+ "require-dev": {
+ "doctrine/collections": "^1.6.8",
+ "doctrine/common": "^2.13.3 || ^3.2.2",
+ "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "src/DeepCopy/deep_copy.php"
+ ],
+ "psr-4": {
+ "DeepCopy\\": "src/DeepCopy/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Create deep copies (clones) of your objects",
+ "keywords": [
+ "clone",
+ "copy",
+ "duplicate",
+ "object",
+ "object graph"
+ ],
+ "support": {
+ "issues": "https://github.com/myclabs/DeepCopy/issues",
+ "source": "https://github.com/myclabs/DeepCopy/tree/1.11.0"
+ },
+ "funding": [
+ {
+ "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-03-03T13:19:32+00:00"
+ },
+ {
+ "name": "nunomaduro/collision",
+ "version": "v5.11.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/nunomaduro/collision.git",
+ "reference": "8b610eef8582ccdc05d8f2ab23305e2d37049461"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/nunomaduro/collision/zipball/8b610eef8582ccdc05d8f2ab23305e2d37049461",
+ "reference": "8b610eef8582ccdc05d8f2ab23305e2d37049461",
+ "shasum": ""
+ },
+ "require": {
+ "facade/ignition-contracts": "^1.0",
+ "filp/whoops": "^2.14.3",
+ "php": "^7.3 || ^8.0",
+ "symfony/console": "^5.0"
+ },
+ "require-dev": {
+ "brianium/paratest": "^6.1",
+ "fideloper/proxy": "^4.4.1",
+ "fruitcake/laravel-cors": "^2.0.3",
+ "laravel/framework": "8.x-dev",
+ "nunomaduro/larastan": "^0.6.2",
+ "nunomaduro/mock-final-classes": "^1.0",
+ "orchestra/testbench": "^6.0",
+ "phpstan/phpstan": "^0.12.64",
+ "phpunit/phpunit": "^9.5.0"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "NunoMaduro\\Collision\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nuno Maduro",
+ "email": "enunomaduro@gmail.com"
+ }
+ ],
+ "description": "Cli error handling for console/command-line PHP applications.",
+ "keywords": [
+ "artisan",
+ "cli",
+ "command-line",
+ "console",
+ "error",
+ "handling",
+ "laravel",
+ "laravel-zero",
+ "php",
+ "symfony"
+ ],
+ "support": {
+ "issues": "https://github.com/nunomaduro/collision/issues",
+ "source": "https://github.com/nunomaduro/collision"
+ },
+ "funding": [
+ {
+ "url": "https://www.paypal.com/paypalme/enunomaduro",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/nunomaduro",
+ "type": "github"
+ },
+ {
+ "url": "https://www.patreon.com/nunomaduro",
+ "type": "patreon"
+ }
+ ],
+ "time": "2022-01-10T16:22:52+00:00"
+ },
+ {
+ "name": "phar-io/manifest",
+ "version": "2.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phar-io/manifest.git",
+ "reference": "97803eca37d319dfa7826cc2437fc020857acb53"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53",
+ "reference": "97803eca37d319dfa7826cc2437fc020857acb53",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-phar": "*",
+ "ext-xmlwriter": "*",
+ "phar-io/version": "^3.0.1",
+ "php": "^7.2 || ^8.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Arne Blankerts",
+ "email": "arne@blankerts.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Heuer",
+ "email": "sebastian@phpeople.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "Developer"
+ }
+ ],
+ "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)",
+ "support": {
+ "issues": "https://github.com/phar-io/manifest/issues",
+ "source": "https://github.com/phar-io/manifest/tree/2.0.3"
+ },
+ "time": "2021-07-20T11:28:43+00:00"
+ },
+ {
+ "name": "phar-io/version",
+ "version": "3.2.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phar-io/version.git",
+ "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74",
+ "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2 || ^8.0"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Arne Blankerts",
+ "email": "arne@blankerts.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Heuer",
+ "email": "sebastian@phpeople.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "Developer"
+ }
+ ],
+ "description": "Library for handling version information and constraints",
+ "support": {
+ "issues": "https://github.com/phar-io/version/issues",
+ "source": "https://github.com/phar-io/version/tree/3.2.1"
+ },
+ "time": "2022-02-21T01:04:05+00:00"
+ },
+ {
+ "name": "phpdocumentor/reflection-common",
+ "version": "2.2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpDocumentor/ReflectionCommon.git",
+ "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b",
+ "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2 || ^8.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-2.x": "2.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "phpDocumentor\\Reflection\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jaap van Otterdijk",
+ "email": "opensource@ijaap.nl"
+ }
+ ],
+ "description": "Common reflection classes used by phpdocumentor to reflect the code structure",
+ "homepage": "http://www.phpdoc.org",
+ "keywords": [
+ "FQSEN",
+ "phpDocumentor",
+ "phpdoc",
+ "reflection",
+ "static analysis"
+ ],
+ "support": {
+ "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues",
+ "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x"
+ },
+ "time": "2020-06-27T09:03:43+00:00"
+ },
+ {
+ "name": "phpdocumentor/reflection-docblock",
+ "version": "5.3.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
+ "reference": "622548b623e81ca6d78b721c5e029f4ce664f170"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170",
+ "reference": "622548b623e81ca6d78b721c5e029f4ce664f170",
+ "shasum": ""
+ },
+ "require": {
+ "ext-filter": "*",
+ "php": "^7.2 || ^8.0",
+ "phpdocumentor/reflection-common": "^2.2",
+ "phpdocumentor/type-resolver": "^1.3",
+ "webmozart/assert": "^1.9.1"
+ },
+ "require-dev": {
+ "mockery/mockery": "~1.3.2",
+ "psalm/phar": "^4.8"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "5.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "phpDocumentor\\Reflection\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Mike van Riel",
+ "email": "me@mikevanriel.com"
+ },
+ {
+ "name": "Jaap van Otterdijk",
+ "email": "account@ijaap.nl"
+ }
+ ],
+ "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
+ "support": {
+ "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues",
+ "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0"
+ },
+ "time": "2021-10-19T17:43:47+00:00"
+ },
+ {
+ "name": "phpdocumentor/type-resolver",
+ "version": "1.6.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpDocumentor/TypeResolver.git",
+ "reference": "93ebd0014cab80c4ea9f5e297ea48672f1b87706"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/93ebd0014cab80c4ea9f5e297ea48672f1b87706",
+ "reference": "93ebd0014cab80c4ea9f5e297ea48672f1b87706",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2 || ^8.0",
+ "phpdocumentor/reflection-common": "^2.0"
+ },
+ "require-dev": {
+ "ext-tokenizer": "*",
+ "psalm/phar": "^4.8"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-1.x": "1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "phpDocumentor\\Reflection\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Mike van Riel",
+ "email": "me@mikevanriel.com"
+ }
+ ],
+ "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
+ "support": {
+ "issues": "https://github.com/phpDocumentor/TypeResolver/issues",
+ "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.0"
+ },
+ "time": "2022-01-04T19:58:01+00:00"
+ },
+ {
+ "name": "phpspec/prophecy",
+ "version": "v1.15.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpspec/prophecy.git",
+ "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpspec/prophecy/zipball/bbcd7380b0ebf3961ee21409db7b38bc31d69a13",
+ "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/instantiator": "^1.2",
+ "php": "^7.2 || ~8.0, <8.2",
+ "phpdocumentor/reflection-docblock": "^5.2",
+ "sebastian/comparator": "^3.0 || ^4.0",
+ "sebastian/recursion-context": "^3.0 || ^4.0"
+ },
+ "require-dev": {
+ "phpspec/phpspec": "^6.0 || ^7.0",
+ "phpunit/phpunit": "^8.0 || ^9.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Prophecy\\": "src/Prophecy"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Konstantin Kudryashov",
+ "email": "ever.zet@gmail.com",
+ "homepage": "http://everzet.com"
+ },
+ {
+ "name": "Marcello Duarte",
+ "email": "marcello.duarte@gmail.com"
+ }
+ ],
+ "description": "Highly opinionated mocking framework for PHP 5.3+",
+ "homepage": "https://github.com/phpspec/prophecy",
+ "keywords": [
+ "Double",
+ "Dummy",
+ "fake",
+ "mock",
+ "spy",
+ "stub"
+ ],
+ "support": {
+ "issues": "https://github.com/phpspec/prophecy/issues",
+ "source": "https://github.com/phpspec/prophecy/tree/v1.15.0"
+ },
+ "time": "2021-12-08T12:19:24+00:00"
+ },
+ {
+ "name": "phpunit/php-code-coverage",
+ "version": "9.2.15",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
+ "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2e9da11878c4202f97915c1cb4bb1ca318a63f5f",
+ "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-libxml": "*",
+ "ext-xmlwriter": "*",
+ "nikic/php-parser": "^4.13.0",
+ "php": ">=7.3",
+ "phpunit/php-file-iterator": "^3.0.3",
+ "phpunit/php-text-template": "^2.0.2",
+ "sebastian/code-unit-reverse-lookup": "^2.0.2",
+ "sebastian/complexity": "^2.0",
+ "sebastian/environment": "^5.1.2",
+ "sebastian/lines-of-code": "^1.0.3",
+ "sebastian/version": "^3.0.1",
+ "theseer/tokenizer": "^1.2.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "suggest": {
+ "ext-pcov": "*",
+ "ext-xdebug": "*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "9.2-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "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"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
+ "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.15"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2022-03-07T09:28:20+00:00"
+ },
+ {
+ "name": "phpunit/php-file-iterator",
+ "version": "3.0.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
+ "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf",
+ "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "FilterIterator implementation that filters files based on a list of suffixes.",
+ "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
+ "keywords": [
+ "filesystem",
+ "iterator"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues",
+ "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2021-12-02T12:48:52+00:00"
+ },
+ {
+ "name": "phpunit/php-invoker",
+ "version": "3.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-invoker.git",
+ "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67",
+ "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "ext-pcntl": "*",
+ "phpunit/phpunit": "^9.3"
+ },
+ "suggest": {
+ "ext-pcntl": "*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.1-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Invoke callables with a timeout",
+ "homepage": "https://github.com/sebastianbergmann/php-invoker/",
+ "keywords": [
+ "process"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-invoker/issues",
+ "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-09-28T05:58:55+00:00"
+ },
+ {
+ "name": "phpunit/php-text-template",
+ "version": "2.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-text-template.git",
+ "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28",
+ "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Simple template engine.",
+ "homepage": "https://github.com/sebastianbergmann/php-text-template/",
+ "keywords": [
+ "template"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-text-template/issues",
+ "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-10-26T05:33:50+00:00"
+ },
+ {
+ "name": "phpunit/php-timer",
+ "version": "5.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-timer.git",
+ "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2",
+ "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "5.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Utility class for timing",
+ "homepage": "https://github.com/sebastianbergmann/php-timer/",
+ "keywords": [
+ "timer"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-timer/issues",
+ "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-10-26T13:16:10+00:00"
+ },
+ {
+ "name": "phpunit/phpunit",
+ "version": "9.5.18",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/phpunit.git",
+ "reference": "1b5856028273bfd855e60a887278857d872ec67a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/1b5856028273bfd855e60a887278857d872ec67a",
+ "reference": "1b5856028273bfd855e60a887278857d872ec67a",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/instantiator": "^1.3.1",
+ "ext-dom": "*",
+ "ext-json": "*",
+ "ext-libxml": "*",
+ "ext-mbstring": "*",
+ "ext-xml": "*",
+ "ext-xmlwriter": "*",
+ "myclabs/deep-copy": "^1.10.1",
+ "phar-io/manifest": "^2.0.3",
+ "phar-io/version": "^3.0.2",
+ "php": ">=7.3",
+ "phpspec/prophecy": "^1.12.1",
+ "phpunit/php-code-coverage": "^9.2.13",
+ "phpunit/php-file-iterator": "^3.0.5",
+ "phpunit/php-invoker": "^3.1.1",
+ "phpunit/php-text-template": "^2.0.3",
+ "phpunit/php-timer": "^5.0.2",
+ "sebastian/cli-parser": "^1.0.1",
+ "sebastian/code-unit": "^1.0.6",
+ "sebastian/comparator": "^4.0.5",
+ "sebastian/diff": "^4.0.3",
+ "sebastian/environment": "^5.1.3",
+ "sebastian/exporter": "^4.0.3",
+ "sebastian/global-state": "^5.0.1",
+ "sebastian/object-enumerator": "^4.0.3",
+ "sebastian/resource-operations": "^3.0.3",
+ "sebastian/type": "^2.3.4",
+ "sebastian/version": "^3.0.2"
+ },
+ "require-dev": {
+ "ext-pdo": "*",
+ "phpspec/prophecy-phpunit": "^2.0.1"
+ },
+ "suggest": {
+ "ext-soap": "*",
+ "ext-xdebug": "*"
+ },
+ "bin": [
+ "phpunit"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "9.5-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/Framework/Assert/Functions.php"
+ ],
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "The PHP Unit Testing framework.",
+ "homepage": "https://phpunit.de/",
+ "keywords": [
+ "phpunit",
+ "testing",
+ "xunit"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/phpunit/issues",
+ "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.18"
+ },
+ "funding": [
+ {
+ "url": "https://phpunit.de/sponsors.html",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2022-03-08T06:52:28+00:00"
+ },
+ {
+ "name": "sebastian/cli-parser",
+ "version": "1.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/cli-parser.git",
+ "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2",
+ "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library for parsing CLI options",
+ "homepage": "https://github.com/sebastianbergmann/cli-parser",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/cli-parser/issues",
+ "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-09-28T06:08:49+00:00"
+ },
+ {
+ "name": "sebastian/code-unit",
+ "version": "1.0.8",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/code-unit.git",
+ "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120",
+ "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Collection of value objects that represent the PHP code units",
+ "homepage": "https://github.com/sebastianbergmann/code-unit",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/code-unit/issues",
+ "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-10-26T13:08:54+00:00"
+ },
+ {
+ "name": "sebastian/code-unit-reverse-lookup",
+ "version": "2.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
+ "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5",
+ "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Looks up which function or method a line of code belongs to",
+ "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues",
+ "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-09-28T05:30:19+00:00"
+ },
+ {
+ "name": "sebastian/comparator",
+ "version": "4.0.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/comparator.git",
+ "reference": "55f4261989e546dc112258c7a75935a81a7ce382"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382",
+ "reference": "55f4261989e546dc112258c7a75935a81a7ce382",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3",
+ "sebastian/diff": "^4.0",
+ "sebastian/exporter": "^4.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Volker Dusch",
+ "email": "github@wallbash.com"
+ },
+ {
+ "name": "Bernhard Schussek",
+ "email": "bschussek@2bepublished.at"
+ }
+ ],
+ "description": "Provides the functionality to compare PHP values for equality",
+ "homepage": "https://github.com/sebastianbergmann/comparator",
+ "keywords": [
+ "comparator",
+ "compare",
+ "equality"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/comparator/issues",
+ "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-10-26T15:49:45+00:00"
+ },
+ {
+ "name": "sebastian/complexity",
+ "version": "2.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/complexity.git",
+ "reference": "739b35e53379900cc9ac327b2147867b8b6efd88"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88",
+ "reference": "739b35e53379900cc9ac327b2147867b8b6efd88",
+ "shasum": ""
+ },
+ "require": {
+ "nikic/php-parser": "^4.7",
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library for calculating the complexity of PHP code units",
+ "homepage": "https://github.com/sebastianbergmann/complexity",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/complexity/issues",
+ "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-10-26T15:52:27+00:00"
+ },
+ {
+ "name": "sebastian/diff",
+ "version": "4.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/diff.git",
+ "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d",
+ "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3",
+ "symfony/process": "^4.2 || ^5"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Kore Nordmann",
+ "email": "mail@kore-nordmann.de"
+ }
+ ],
+ "description": "Diff implementation",
+ "homepage": "https://github.com/sebastianbergmann/diff",
+ "keywords": [
+ "diff",
+ "udiff",
+ "unidiff",
+ "unified diff"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/diff/issues",
+ "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-10-26T13:10:38+00:00"
+ },
+ {
+ "name": "sebastian/environment",
+ "version": "5.1.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/environment.git",
+ "reference": "388b6ced16caa751030f6a69e588299fa09200ac"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/388b6ced16caa751030f6a69e588299fa09200ac",
+ "reference": "388b6ced16caa751030f6a69e588299fa09200ac",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "suggest": {
+ "ext-posix": "*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "5.1-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Provides functionality to handle HHVM/PHP environments",
+ "homepage": "http://www.github.com/sebastianbergmann/environment",
+ "keywords": [
+ "Xdebug",
+ "environment",
+ "hhvm"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/environment/issues",
+ "source": "https://github.com/sebastianbergmann/environment/tree/5.1.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-09-28T05:52:38+00:00"
+ },
+ {
+ "name": "sebastian/exporter",
+ "version": "4.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/exporter.git",
+ "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/65e8b7db476c5dd267e65eea9cab77584d3cfff9",
+ "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3",
+ "sebastian/recursion-context": "^4.0"
+ },
+ "require-dev": {
+ "ext-mbstring": "*",
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Volker Dusch",
+ "email": "github@wallbash.com"
+ },
+ {
+ "name": "Adam Harvey",
+ "email": "aharvey@php.net"
+ },
+ {
+ "name": "Bernhard Schussek",
+ "email": "bschussek@gmail.com"
+ }
+ ],
+ "description": "Provides the functionality to export PHP variables for visualization",
+ "homepage": "https://www.github.com/sebastianbergmann/exporter",
+ "keywords": [
+ "export",
+ "exporter"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/exporter/issues",
+ "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2021-11-11T14:18:36+00:00"
+ },
+ {
+ "name": "sebastian/global-state",
+ "version": "5.0.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/global-state.git",
+ "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/0ca8db5a5fc9c8646244e629625ac486fa286bf2",
+ "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3",
+ "sebastian/object-reflector": "^2.0",
+ "sebastian/recursion-context": "^4.0"
+ },
+ "require-dev": {
+ "ext-dom": "*",
+ "phpunit/phpunit": "^9.3"
+ },
+ "suggest": {
+ "ext-uopz": "*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "5.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Snapshotting of global state",
+ "homepage": "http://www.github.com/sebastianbergmann/global-state",
+ "keywords": [
+ "global state"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/global-state/issues",
+ "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.5"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2022-02-14T08:28:10+00:00"
+ },
+ {
+ "name": "sebastian/lines-of-code",
+ "version": "1.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/lines-of-code.git",
+ "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc",
+ "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc",
+ "shasum": ""
+ },
+ "require": {
+ "nikic/php-parser": "^4.6",
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library for counting the lines of code in PHP source code",
+ "homepage": "https://github.com/sebastianbergmann/lines-of-code",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/lines-of-code/issues",
+ "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-11-28T06:42:11+00:00"
+ },
+ {
+ "name": "sebastian/object-enumerator",
+ "version": "4.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/object-enumerator.git",
+ "reference": "5c9eeac41b290a3712d88851518825ad78f45c71"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71",
+ "reference": "5c9eeac41b290a3712d88851518825ad78f45c71",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3",
+ "sebastian/object-reflector": "^2.0",
+ "sebastian/recursion-context": "^4.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Traverses array structures and object graphs to enumerate all referenced objects",
+ "homepage": "https://github.com/sebastianbergmann/object-enumerator/",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/object-enumerator/issues",
+ "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-10-26T13:12:34+00:00"
+ },
+ {
+ "name": "sebastian/object-reflector",
+ "version": "2.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/object-reflector.git",
+ "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7",
+ "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Allows reflection of object attributes, including inherited and non-public ones",
+ "homepage": "https://github.com/sebastianbergmann/object-reflector/",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/object-reflector/issues",
+ "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-10-26T13:14:26+00:00"
+ },
+ {
+ "name": "sebastian/recursion-context",
+ "version": "4.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/recursion-context.git",
+ "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172",
+ "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Adam Harvey",
+ "email": "aharvey@php.net"
+ }
+ ],
+ "description": "Provides functionality to recursively process PHP variables",
+ "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/recursion-context/issues",
+ "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-10-26T13:17:30+00:00"
+ },
+ {
+ "name": "sebastian/resource-operations",
+ "version": "3.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/resource-operations.git",
+ "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8",
+ "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Provides a list of PHP built-in functions that operate on resources",
+ "homepage": "https://www.github.com/sebastianbergmann/resource-operations",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/resource-operations/issues",
+ "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-09-28T06:45:17+00:00"
+ },
+ {
+ "name": "sebastian/type",
+ "version": "2.3.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/type.git",
+ "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b8cd8a1c753c90bc1a0f5372170e3e489136f914",
+ "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.3-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Collection of value objects that represent the types of the PHP type system",
+ "homepage": "https://github.com/sebastianbergmann/type",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/type/issues",
+ "source": "https://github.com/sebastianbergmann/type/tree/2.3.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2021-06-15T12:49:02+00:00"
+ },
+ {
+ "name": "sebastian/version",
+ "version": "3.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/version.git",
+ "reference": "c6c1022351a901512170118436c764e473f6de8c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c",
+ "reference": "c6c1022351a901512170118436c764e473f6de8c",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library that helps with managing the version number of Git-hosted PHP projects",
+ "homepage": "https://github.com/sebastianbergmann/version",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/version/issues",
+ "source": "https://github.com/sebastianbergmann/version/tree/3.0.2"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-09-28T06:39:44+00:00"
+ },
+ {
+ "name": "shalvah/clara",
+ "version": "3.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/shalvah/clara.git",
+ "reference": "d3ae9b277393d438edbfcf9ddb7ca42e958fa054"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/shalvah/clara/zipball/d3ae9b277393d438edbfcf9ddb7ca42e958fa054",
+ "reference": "d3ae9b277393d438edbfcf9ddb7ca42e958fa054",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.4",
+ "symfony/console": "^4.0|^5.0|^6.0"
+ },
+ "require-dev": {
+ "eloquent/phony-phpunit": "^7.0",
+ "phpunit/phpunit": "^9.1"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "helpers.php"
+ ],
+ "psr-4": {
+ "Shalvah\\Clara\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "🔊 Simple, pretty, testable console output for CLI apps.",
+ "keywords": [
+ "cli",
+ "log",
+ "logging"
+ ],
+ "support": {
+ "issues": "https://github.com/shalvah/clara/issues",
+ "source": "https://github.com/shalvah/clara/tree/3.1.0"
+ },
+ "time": "2022-01-14T13:54:30+00:00"
+ },
+ {
+ "name": "shalvah/upgrader",
+ "version": "0.2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/shalvah/upgrader.git",
+ "reference": "3f07bf967b450c05f0783790c6dd353a6775a424"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/shalvah/upgrader/zipball/3f07bf967b450c05f0783790c6dd353a6775a424",
+ "reference": "3f07bf967b450c05f0783790c6dd353a6775a424",
+ "shasum": ""
+ },
+ "require": {
+ "illuminate/support": "^6.0|^7.0|^8.0|^9.0",
+ "nikic/php-parser": "^4.13",
+ "php": ">=7.4"
+ },
+ "require-dev": {
+ "dms/phpunit-arraysubset-asserts": "^0.2.0",
+ "pestphp/pest": "^1.21",
+ "phpstan/phpstan": "^1.0",
+ "spatie/ray": "^1.33"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Shalvah\\Upgrader\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Shalvah",
+ "email": "hello@shalvah.me"
+ }
+ ],
+ "description": "Create automatic upgrades for your package.",
+ "homepage": "http://github.com/shalvah/upgrader",
+ "keywords": [
+ "upgrade"
+ ],
+ "support": {
+ "issues": "https://github.com/shalvah/upgrader/issues",
+ "source": "https://github.com/shalvah/upgrader/tree/0.2.0"
+ },
+ "funding": [
+ {
+ "url": "https://patreon.com/shalvah",
+ "type": "patreon"
+ }
+ ],
+ "time": "2022-01-14T11:07:47+00:00"
+ },
+ {
+ "name": "spatie/data-transfer-object",
+ "version": "2.8.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/spatie/data-transfer-object.git",
+ "reference": "167ebbe56ead65ef23abcfae7b75f932afd496a4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/spatie/data-transfer-object/zipball/167ebbe56ead65ef23abcfae7b75f932afd496a4",
+ "reference": "167ebbe56ead65ef23abcfae7b75f932afd496a4",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.4|^8.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.0"
+ },
+ "suggest": {
+ "phpstan/phpstan": "Take advantage of checkUninitializedProperties with \\Spatie\\DataTransferObject\\PHPstan\\PropertiesAreAlwaysInitializedExtension"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Spatie\\DataTransferObject\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Brent Roose",
+ "email": "brent@spatie.be",
+ "homepage": "https://spatie.be",
+ "role": "Developer"
+ }
+ ],
+ "description": "Data transfer objects with batteries included",
+ "homepage": "https://github.com/spatie/data-transfer-object",
+ "keywords": [
+ "data-transfer-object",
+ "spatie"
+ ],
+ "support": {
+ "issues": "https://github.com/spatie/data-transfer-object/issues",
+ "source": "https://github.com/spatie/data-transfer-object/tree/2.8.4"
+ },
+ "funding": [
+ {
+ "url": "https://spatie.be/open-source/support-us",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/spatie",
+ "type": "github"
+ }
+ ],
+ "time": "2021-12-07T05:41:11+00:00"
+ },
+ {
+ "name": "symfony/var-exporter",
+ "version": "v5.4.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/var-exporter.git",
+ "reference": "49e2355fe6f59ea30c18ebb68edf13b7e20582e5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/var-exporter/zipball/49e2355fe6f59ea30c18ebb68edf13b7e20582e5",
+ "reference": "49e2355fe6f59ea30c18ebb68edf13b7e20582e5",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "symfony/polyfill-php80": "^1.16"
+ },
+ "require-dev": {
+ "symfony/var-dumper": "^4.4.9|^5.0.9|^6.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\VarExporter\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Allows exporting any serializable PHP data structure to plain PHP code",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "clone",
+ "construct",
+ "export",
+ "hydrate",
+ "instantiate",
+ "serialize"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/var-exporter/tree/v5.4.6"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-03-02T12:42:23+00:00"
+ },
+ {
+ "name": "symfony/yaml",
+ "version": "v5.4.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/yaml.git",
+ "reference": "e80f87d2c9495966768310fc531b487ce64237a2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/yaml/zipball/e80f87d2c9495966768310fc531b487ce64237a2",
+ "reference": "e80f87d2c9495966768310fc531b487ce64237a2",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "symfony/deprecation-contracts": "^2.1|^3",
+ "symfony/polyfill-ctype": "^1.8"
+ },
+ "conflict": {
+ "symfony/console": "<5.3"
+ },
+ "require-dev": {
+ "symfony/console": "^5.3|^6.0"
+ },
+ "suggest": {
+ "symfony/console": "For validating YAML files using the lint command"
+ },
+ "bin": [
+ "Resources/bin/yaml-lint"
+ ],
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Yaml\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Loads and dumps YAML files",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/yaml/tree/v5.4.3"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-01-26T16:32:32+00:00"
+ },
+ {
+ "name": "theseer/tokenizer",
+ "version": "1.2.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/theseer/tokenizer.git",
+ "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e",
+ "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-tokenizer": "*",
+ "ext-xmlwriter": "*",
+ "php": "^7.2 || ^8.0"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Arne Blankerts",
+ "email": "arne@blankerts.de",
+ "role": "Developer"
+ }
+ ],
+ "description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
+ "support": {
+ "issues": "https://github.com/theseer/tokenizer/issues",
+ "source": "https://github.com/theseer/tokenizer/tree/1.2.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/theseer",
+ "type": "github"
+ }
+ ],
+ "time": "2021-07-28T10:34:58+00:00"
+ }
+ ],
+ "aliases": [],
+ "minimum-stability": "dev",
+ "stability-flags": [],
+ "prefer-stable": true,
+ "prefer-lowest": false,
+ "platform": {
+ "php": "^7.3|^8.0"
+ },
+ "platform-dev": [],
+ "plugin-api-version": "2.2.0"
+}
diff --git a/config/app.php b/config/app.php
new file mode 100644
index 000000000..a8d1a82e4
--- /dev/null
+++ b/config/app.php
@@ -0,0 +1,235 @@
+ env('APP_NAME', 'Laravel'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Application Environment
+ |--------------------------------------------------------------------------
+ |
+ | This value determines the "environment" your application is currently
+ | running in. This may determine how you prefer to configure various
+ | services the application utilizes. Set this in your ".env" file.
+ |
+ */
+
+ 'env' => env('APP_ENV', 'production'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Application Debug Mode
+ |--------------------------------------------------------------------------
+ |
+ | When your application is in debug mode, detailed error messages with
+ | stack traces will be shown on every error that occurs within your
+ | application. If disabled, a simple generic error page is shown.
+ |
+ */
+
+ 'debug' => (bool) env('APP_DEBUG', false),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Application URL
+ |--------------------------------------------------------------------------
+ |
+ | This URL is used by the console to properly generate URLs when using
+ | the Artisan command line tool. You should set this to the root of
+ | your application so that it is used when running Artisan tasks.
+ |
+ */
+
+ 'url' => env('APP_URL', 'http://localhost'),
+
+ 'asset_url' => env('ASSET_URL', null),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Application Timezone
+ |--------------------------------------------------------------------------
+ |
+ | Here you may specify the default timezone for your application, which
+ | will be used by the PHP date and date-time functions. We have gone
+ | ahead and set this to a sensible default for you out of the box.
+ |
+ */
+
+ 'timezone' => 'UTC',
+
+ /*
+ |--------------------------------------------------------------------------
+ | Application Locale Configuration
+ |--------------------------------------------------------------------------
+ |
+ | The application locale determines the default locale that will be used
+ | by the translation service provider. You are free to set this value
+ | to any of the locales which will be supported by the application.
+ |
+ */
+
+ 'locale' => 'en',
+
+ /*
+ |--------------------------------------------------------------------------
+ | Application Fallback Locale
+ |--------------------------------------------------------------------------
+ |
+ | The fallback locale determines the locale to use when the current one
+ | is not available. You may change the value to correspond to any of
+ | the language folders that are provided through your application.
+ |
+ */
+
+ 'fallback_locale' => 'en',
+
+ /*
+ |--------------------------------------------------------------------------
+ | Faker Locale
+ |--------------------------------------------------------------------------
+ |
+ | This locale will be used by the Faker PHP library when generating fake
+ | data for your database seeds. For example, this will be used to get
+ | localized telephone numbers, street address information and more.
+ |
+ */
+
+ 'faker_locale' => 'en_US',
+
+ /*
+ |--------------------------------------------------------------------------
+ | Encryption Key
+ |--------------------------------------------------------------------------
+ |
+ | This key is used by the Illuminate encrypter service and should be set
+ | to a random, 32 character string, otherwise these encrypted strings
+ | will not be safe. Please do this before deploying an application!
+ |
+ */
+
+ 'key' => env('APP_KEY'),
+
+ 'cipher' => 'AES-256-CBC',
+
+ /*
+ |--------------------------------------------------------------------------
+ | Autoloaded Service Providers
+ |--------------------------------------------------------------------------
+ |
+ | The service providers listed here will be automatically loaded on the
+ | request to your application. Feel free to add your own services to
+ | this array to grant expanded functionality to your applications.
+ |
+ */
+
+ 'providers' => [
+
+ /*
+ * Laravel Framework Service Providers...
+ */
+ Illuminate\Auth\AuthServiceProvider::class,
+ Illuminate\Broadcasting\BroadcastServiceProvider::class,
+ Illuminate\Bus\BusServiceProvider::class,
+ Illuminate\Cache\CacheServiceProvider::class,
+ Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class,
+ Illuminate\Cookie\CookieServiceProvider::class,
+ Illuminate\Database\DatabaseServiceProvider::class,
+ Illuminate\Encryption\EncryptionServiceProvider::class,
+ Illuminate\Filesystem\FilesystemServiceProvider::class,
+ Illuminate\Foundation\Providers\FoundationServiceProvider::class,
+ Illuminate\Hashing\HashServiceProvider::class,
+ Illuminate\Mail\MailServiceProvider::class,
+ Illuminate\Notifications\NotificationServiceProvider::class,
+ Illuminate\Pagination\PaginationServiceProvider::class,
+ Illuminate\Pipeline\PipelineServiceProvider::class,
+ Illuminate\Queue\QueueServiceProvider::class,
+ Illuminate\Redis\RedisServiceProvider::class,
+ Illuminate\Auth\Passwords\PasswordResetServiceProvider::class,
+ Illuminate\Session\SessionServiceProvider::class,
+ Illuminate\Translation\TranslationServiceProvider::class,
+ Illuminate\Validation\ValidationServiceProvider::class,
+ Illuminate\View\ViewServiceProvider::class,
+
+ /*
+ * Package Service Providers...
+ */
+
+ /*
+ * Application Service Providers...
+ */
+ App\Providers\AppServiceProvider::class,
+ App\Providers\AuthServiceProvider::class,
+ // App\Providers\BroadcastServiceProvider::class,
+ App\Providers\EventServiceProvider::class,
+ App\Providers\RouteServiceProvider::class,
+
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Class Aliases
+ |--------------------------------------------------------------------------
+ |
+ | This array of class aliases will be registered when this application
+ | is started. However, feel free to register as many as you wish as
+ | the aliases are "lazy" loaded so they don't hinder performance.
+ |
+ */
+
+ 'aliases' => [
+
+ 'App' => Illuminate\Support\Facades\App::class,
+ 'Arr' => Illuminate\Support\Arr::class,
+ 'Artisan' => Illuminate\Support\Facades\Artisan::class,
+ 'Auth' => Illuminate\Support\Facades\Auth::class,
+ 'Blade' => Illuminate\Support\Facades\Blade::class,
+ 'Broadcast' => Illuminate\Support\Facades\Broadcast::class,
+ 'Bus' => Illuminate\Support\Facades\Bus::class,
+ 'Cache' => Illuminate\Support\Facades\Cache::class,
+ 'Config' => Illuminate\Support\Facades\Config::class,
+ 'Cookie' => Illuminate\Support\Facades\Cookie::class,
+ 'Crypt' => Illuminate\Support\Facades\Crypt::class,
+ 'Date' => Illuminate\Support\Facades\Date::class,
+ 'DB' => Illuminate\Support\Facades\DB::class,
+ 'Eloquent' => Illuminate\Database\Eloquent\Model::class,
+ 'Event' => Illuminate\Support\Facades\Event::class,
+ 'File' => Illuminate\Support\Facades\File::class,
+ 'Gate' => Illuminate\Support\Facades\Gate::class,
+ 'Hash' => Illuminate\Support\Facades\Hash::class,
+ 'Http' => Illuminate\Support\Facades\Http::class,
+ 'Js' => Illuminate\Support\Js::class,
+ 'Lang' => Illuminate\Support\Facades\Lang::class,
+ 'Log' => Illuminate\Support\Facades\Log::class,
+ 'Mail' => Illuminate\Support\Facades\Mail::class,
+ 'Notification' => Illuminate\Support\Facades\Notification::class,
+ 'Password' => Illuminate\Support\Facades\Password::class,
+ 'Queue' => Illuminate\Support\Facades\Queue::class,
+ 'RateLimiter' => Illuminate\Support\Facades\RateLimiter::class,
+ 'Redirect' => Illuminate\Support\Facades\Redirect::class,
+ // 'Redis' => Illuminate\Support\Facades\Redis::class,
+ 'Request' => Illuminate\Support\Facades\Request::class,
+ 'Response' => Illuminate\Support\Facades\Response::class,
+ 'Route' => Illuminate\Support\Facades\Route::class,
+ 'Schema' => Illuminate\Support\Facades\Schema::class,
+ 'Session' => Illuminate\Support\Facades\Session::class,
+ 'Storage' => Illuminate\Support\Facades\Storage::class,
+ 'Str' => Illuminate\Support\Str::class,
+ 'URL' => Illuminate\Support\Facades\URL::class,
+ 'Validator' => Illuminate\Support\Facades\Validator::class,
+ 'View' => Illuminate\Support\Facades\View::class,
+
+ ],
+
+];
diff --git a/config/auth.php b/config/auth.php
new file mode 100644
index 000000000..d8c6cee7c
--- /dev/null
+++ b/config/auth.php
@@ -0,0 +1,111 @@
+ [
+ 'guard' => 'web',
+ 'passwords' => 'users',
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Authentication Guards
+ |--------------------------------------------------------------------------
+ |
+ | Next, you may define every authentication guard for your application.
+ | Of course, a great default configuration has been defined for you
+ | here which uses session storage and the Eloquent user provider.
+ |
+ | All authentication drivers have a user provider. This defines how the
+ | users are actually retrieved out of your database or other storage
+ | mechanisms used by this application to persist your user's data.
+ |
+ | Supported: "session"
+ |
+ */
+
+ 'guards' => [
+ 'web' => [
+ 'driver' => 'session',
+ 'provider' => 'users',
+ ],
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | User Providers
+ |--------------------------------------------------------------------------
+ |
+ | All authentication drivers have a user provider. This defines how the
+ | users are actually retrieved out of your database or other storage
+ | mechanisms used by this application to persist your user's data.
+ |
+ | If you have multiple user tables or models you may configure multiple
+ | sources which represent each model / table. These sources may then
+ | be assigned to any extra authentication guards you have defined.
+ |
+ | Supported: "database", "eloquent"
+ |
+ */
+
+ 'providers' => [
+ 'users' => [
+ 'driver' => 'eloquent',
+ 'model' => App\Models\User::class,
+ ],
+
+ // 'users' => [
+ // 'driver' => 'database',
+ // 'table' => 'users',
+ // ],
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Resetting Passwords
+ |--------------------------------------------------------------------------
+ |
+ | You may specify multiple password reset configurations if you have more
+ | than one user table or model in the application and you want to have
+ | separate password reset settings based on the specific user types.
+ |
+ | The expire time is the number of minutes that each reset token will be
+ | considered valid. This security feature keeps tokens short-lived so
+ | they have less time to be guessed. You may change this as needed.
+ |
+ */
+
+ 'passwords' => [
+ 'users' => [
+ 'provider' => 'users',
+ 'table' => 'password_resets',
+ 'expire' => 60,
+ 'throttle' => 60,
+ ],
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Password Confirmation Timeout
+ |--------------------------------------------------------------------------
+ |
+ | Here you may define the amount of seconds before a password confirmation
+ | times out and the user is prompted to re-enter their password via the
+ | confirmation screen. By default, the timeout lasts for three hours.
+ |
+ */
+
+ 'password_timeout' => 10800,
+
+];
diff --git a/config/broadcasting.php b/config/broadcasting.php
new file mode 100644
index 000000000..2d529820c
--- /dev/null
+++ b/config/broadcasting.php
@@ -0,0 +1,64 @@
+ env('BROADCAST_DRIVER', 'null'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Broadcast Connections
+ |--------------------------------------------------------------------------
+ |
+ | Here you may define all of the broadcast connections that will be used
+ | to broadcast events to other systems or over websockets. Samples of
+ | each available type of connection are provided inside this array.
+ |
+ */
+
+ 'connections' => [
+
+ 'pusher' => [
+ 'driver' => 'pusher',
+ 'key' => env('PUSHER_APP_KEY'),
+ 'secret' => env('PUSHER_APP_SECRET'),
+ 'app_id' => env('PUSHER_APP_ID'),
+ 'options' => [
+ 'cluster' => env('PUSHER_APP_CLUSTER'),
+ 'useTLS' => true,
+ ],
+ ],
+
+ 'ably' => [
+ 'driver' => 'ably',
+ 'key' => env('ABLY_KEY'),
+ ],
+
+ 'redis' => [
+ 'driver' => 'redis',
+ 'connection' => 'default',
+ ],
+
+ 'log' => [
+ 'driver' => 'log',
+ ],
+
+ 'null' => [
+ 'driver' => 'null',
+ ],
+
+ ],
+
+];
diff --git a/config/cache.php b/config/cache.php
new file mode 100644
index 000000000..8736c7a7a
--- /dev/null
+++ b/config/cache.php
@@ -0,0 +1,110 @@
+ env('CACHE_DRIVER', 'file'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Cache Stores
+ |--------------------------------------------------------------------------
+ |
+ | Here you may define all of the cache "stores" for your application as
+ | well as their drivers. You may even define multiple stores for the
+ | same cache driver to group types of items stored in your caches.
+ |
+ | Supported drivers: "apc", "array", "database", "file",
+ | "memcached", "redis", "dynamodb", "octane", "null"
+ |
+ */
+
+ 'stores' => [
+
+ 'apc' => [
+ 'driver' => 'apc',
+ ],
+
+ 'array' => [
+ 'driver' => 'array',
+ 'serialize' => false,
+ ],
+
+ 'database' => [
+ 'driver' => 'database',
+ 'table' => 'cache',
+ 'connection' => null,
+ 'lock_connection' => null,
+ ],
+
+ 'file' => [
+ 'driver' => 'file',
+ 'path' => storage_path('framework/cache/data'),
+ ],
+
+ 'memcached' => [
+ 'driver' => 'memcached',
+ 'persistent_id' => env('MEMCACHED_PERSISTENT_ID'),
+ 'sasl' => [
+ env('MEMCACHED_USERNAME'),
+ env('MEMCACHED_PASSWORD'),
+ ],
+ 'options' => [
+ // Memcached::OPT_CONNECT_TIMEOUT => 2000,
+ ],
+ 'servers' => [
+ [
+ 'host' => env('MEMCACHED_HOST', '127.0.0.1'),
+ 'port' => env('MEMCACHED_PORT', 11211),
+ 'weight' => 100,
+ ],
+ ],
+ ],
+
+ 'redis' => [
+ 'driver' => 'redis',
+ 'connection' => 'cache',
+ 'lock_connection' => 'default',
+ ],
+
+ 'dynamodb' => [
+ 'driver' => 'dynamodb',
+ 'key' => env('AWS_ACCESS_KEY_ID'),
+ 'secret' => env('AWS_SECRET_ACCESS_KEY'),
+ 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
+ 'table' => env('DYNAMODB_CACHE_TABLE', 'cache'),
+ 'endpoint' => env('DYNAMODB_ENDPOINT'),
+ ],
+
+ 'octane' => [
+ 'driver' => 'octane',
+ ],
+
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Cache Key Prefix
+ |--------------------------------------------------------------------------
+ |
+ | When utilizing a RAM based store such as APC or Memcached, there might
+ | be other applications utilizing the same cache. So, we'll specify a
+ | value to get prefixed to all our keys so we can avoid collisions.
+ |
+ */
+
+ 'prefix' => env('CACHE_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_cache'),
+
+];
diff --git a/config/cors.php b/config/cors.php
new file mode 100644
index 000000000..8a39e6daa
--- /dev/null
+++ b/config/cors.php
@@ -0,0 +1,34 @@
+ ['api/*', 'sanctum/csrf-cookie'],
+
+ 'allowed_methods' => ['*'],
+
+ 'allowed_origins' => ['*'],
+
+ 'allowed_origins_patterns' => [],
+
+ 'allowed_headers' => ['*'],
+
+ 'exposed_headers' => [],
+
+ 'max_age' => 0,
+
+ 'supports_credentials' => false,
+
+];
diff --git a/config/database.php b/config/database.php
new file mode 100644
index 000000000..b42d9b30a
--- /dev/null
+++ b/config/database.php
@@ -0,0 +1,147 @@
+ env('DB_CONNECTION', 'mysql'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Database Connections
+ |--------------------------------------------------------------------------
+ |
+ | Here are each of the database connections setup for your application.
+ | Of course, examples of configuring each database platform that is
+ | supported by Laravel is shown below to make development simple.
+ |
+ |
+ | All database work in Laravel is done through the PHP PDO facilities
+ | so make sure you have the driver for your particular database of
+ | choice installed on your machine before you begin development.
+ |
+ */
+
+ 'connections' => [
+
+ 'sqlite' => [
+ 'driver' => 'sqlite',
+ 'url' => env('DATABASE_URL'),
+ 'database' => env('DB_DATABASE', database_path('database.sqlite')),
+ 'prefix' => '',
+ 'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true),
+ ],
+
+ 'mysql' => [
+ 'driver' => 'mysql',
+ 'url' => env('DATABASE_URL'),
+ 'host' => env('DB_HOST', '127.0.0.1'),
+ 'port' => env('DB_PORT', '3306'),
+ 'database' => env('DB_DATABASE', 'forge'),
+ 'username' => env('DB_USERNAME', 'forge'),
+ 'password' => env('DB_PASSWORD', ''),
+ 'unix_socket' => env('DB_SOCKET', ''),
+ 'charset' => 'utf8mb4',
+ 'collation' => 'utf8mb4_unicode_ci',
+ 'prefix' => '',
+ 'prefix_indexes' => true,
+ 'strict' => true,
+ 'engine' => null,
+ 'options' => extension_loaded('pdo_mysql') ? array_filter([
+ PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
+ ]) : [],
+ ],
+
+ 'pgsql' => [
+ 'driver' => 'pgsql',
+ 'url' => env('DATABASE_URL'),
+ 'host' => env('DB_HOST', '127.0.0.1'),
+ 'port' => env('DB_PORT', '5432'),
+ 'database' => env('DB_DATABASE', 'forge'),
+ 'username' => env('DB_USERNAME', 'forge'),
+ 'password' => env('DB_PASSWORD', ''),
+ 'charset' => 'utf8',
+ 'prefix' => '',
+ 'prefix_indexes' => true,
+ 'schema' => 'public',
+ 'sslmode' => 'prefer',
+ ],
+
+ 'sqlsrv' => [
+ 'driver' => 'sqlsrv',
+ 'url' => env('DATABASE_URL'),
+ 'host' => env('DB_HOST', 'localhost'),
+ 'port' => env('DB_PORT', '1433'),
+ 'database' => env('DB_DATABASE', 'forge'),
+ 'username' => env('DB_USERNAME', 'forge'),
+ 'password' => env('DB_PASSWORD', ''),
+ 'charset' => 'utf8',
+ 'prefix' => '',
+ 'prefix_indexes' => true,
+ ],
+
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Migration Repository Table
+ |--------------------------------------------------------------------------
+ |
+ | This table keeps track of all the migrations that have already run for
+ | your application. Using this information, we can determine which of
+ | the migrations on disk haven't actually been run in the database.
+ |
+ */
+
+ 'migrations' => 'migrations',
+
+ /*
+ |--------------------------------------------------------------------------
+ | Redis Databases
+ |--------------------------------------------------------------------------
+ |
+ | Redis is an open source, fast, and advanced key-value store that also
+ | provides a richer body of commands than a typical key-value system
+ | such as APC or Memcached. Laravel makes it easy to dig right in.
+ |
+ */
+
+ 'redis' => [
+
+ 'client' => env('REDIS_CLIENT', 'phpredis'),
+
+ 'options' => [
+ 'cluster' => env('REDIS_CLUSTER', 'redis'),
+ 'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'),
+ ],
+
+ 'default' => [
+ 'url' => env('REDIS_URL'),
+ 'host' => env('REDIS_HOST', '127.0.0.1'),
+ 'password' => env('REDIS_PASSWORD', null),
+ 'port' => env('REDIS_PORT', '6379'),
+ 'database' => env('REDIS_DB', '0'),
+ ],
+
+ 'cache' => [
+ 'url' => env('REDIS_URL'),
+ 'host' => env('REDIS_HOST', '127.0.0.1'),
+ 'password' => env('REDIS_PASSWORD', null),
+ 'port' => env('REDIS_PORT', '6379'),
+ 'database' => env('REDIS_CACHE_DB', '1'),
+ ],
+
+ ],
+
+];
diff --git a/config/filesystems.php b/config/filesystems.php
new file mode 100644
index 000000000..760ef9728
--- /dev/null
+++ b/config/filesystems.php
@@ -0,0 +1,73 @@
+ env('FILESYSTEM_DRIVER', 'local'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Filesystem Disks
+ |--------------------------------------------------------------------------
+ |
+ | Here you may configure as many filesystem "disks" as you wish, and you
+ | may even configure multiple disks of the same driver. Defaults have
+ | been setup for each driver as an example of the required options.
+ |
+ | Supported Drivers: "local", "ftp", "sftp", "s3"
+ |
+ */
+
+ 'disks' => [
+
+ 'local' => [
+ 'driver' => 'local',
+ 'root' => storage_path('app'),
+ ],
+
+ 'public' => [
+ 'driver' => 'local',
+ 'root' => storage_path('app/public'),
+ 'url' => env('APP_URL').'/storage',
+ 'visibility' => 'public',
+ ],
+
+ 's3' => [
+ 'driver' => 's3',
+ 'key' => env('AWS_ACCESS_KEY_ID'),
+ 'secret' => env('AWS_SECRET_ACCESS_KEY'),
+ 'region' => env('AWS_DEFAULT_REGION'),
+ 'bucket' => env('AWS_BUCKET'),
+ 'url' => env('AWS_URL'),
+ 'endpoint' => env('AWS_ENDPOINT'),
+ 'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false),
+ ],
+
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Symbolic Links
+ |--------------------------------------------------------------------------
+ |
+ | Here you may configure the symbolic links that will be created when the
+ | `storage:link` Artisan command is executed. The array keys should be
+ | the locations of the links and the values should be their targets.
+ |
+ */
+
+ 'links' => [
+ public_path('storage') => storage_path('app/public'),
+ ],
+
+];
diff --git a/config/hashing.php b/config/hashing.php
new file mode 100644
index 000000000..bcd3be4c2
--- /dev/null
+++ b/config/hashing.php
@@ -0,0 +1,52 @@
+ 'bcrypt',
+
+ /*
+ |--------------------------------------------------------------------------
+ | Bcrypt Options
+ |--------------------------------------------------------------------------
+ |
+ | Here you may specify the configuration options that should be used when
+ | passwords are hashed using the Bcrypt algorithm. This will allow you
+ | to control the amount of time it takes to hash the given password.
+ |
+ */
+
+ 'bcrypt' => [
+ 'rounds' => env('BCRYPT_ROUNDS', 10),
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Argon Options
+ |--------------------------------------------------------------------------
+ |
+ | Here you may specify the configuration options that should be used when
+ | passwords are hashed using the Argon algorithm. These will allow you
+ | to control the amount of time it takes to hash the given password.
+ |
+ */
+
+ 'argon' => [
+ 'memory' => 65536,
+ 'threads' => 1,
+ 'time' => 4,
+ ],
+
+];
diff --git a/config/logging.php b/config/logging.php
new file mode 100644
index 000000000..880cd9227
--- /dev/null
+++ b/config/logging.php
@@ -0,0 +1,118 @@
+ env('LOG_CHANNEL', 'stack'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Deprecations Log Channel
+ |--------------------------------------------------------------------------
+ |
+ | This option controls the log channel that should be used to log warnings
+ | regarding deprecated PHP and library features. This allows you to get
+ | your application ready for upcoming major versions of dependencies.
+ |
+ */
+
+ 'deprecations' => env('LOG_DEPRECATIONS_CHANNEL', 'null'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Log Channels
+ |--------------------------------------------------------------------------
+ |
+ | Here you may configure the log channels for your application. Out of
+ | the box, Laravel uses the Monolog PHP logging library. This gives
+ | you a variety of powerful log handlers / formatters to utilize.
+ |
+ | Available Drivers: "single", "daily", "slack", "syslog",
+ | "errorlog", "monolog",
+ | "custom", "stack"
+ |
+ */
+
+ 'channels' => [
+ 'stack' => [
+ 'driver' => 'stack',
+ 'channels' => ['single'],
+ 'ignore_exceptions' => false,
+ ],
+
+ 'single' => [
+ 'driver' => 'single',
+ 'path' => storage_path('logs/laravel.log'),
+ 'level' => env('LOG_LEVEL', 'debug'),
+ ],
+
+ 'daily' => [
+ 'driver' => 'daily',
+ 'path' => storage_path('logs/laravel.log'),
+ 'level' => env('LOG_LEVEL', 'debug'),
+ 'days' => 14,
+ ],
+
+ 'slack' => [
+ 'driver' => 'slack',
+ 'url' => env('LOG_SLACK_WEBHOOK_URL'),
+ 'username' => 'Laravel Log',
+ 'emoji' => ':boom:',
+ 'level' => env('LOG_LEVEL', 'critical'),
+ ],
+
+ 'papertrail' => [
+ 'driver' => 'monolog',
+ 'level' => env('LOG_LEVEL', 'debug'),
+ 'handler' => SyslogUdpHandler::class,
+ 'handler_with' => [
+ 'host' => env('PAPERTRAIL_URL'),
+ 'port' => env('PAPERTRAIL_PORT'),
+ ],
+ ],
+
+ 'stderr' => [
+ 'driver' => 'monolog',
+ 'level' => env('LOG_LEVEL', 'debug'),
+ 'handler' => StreamHandler::class,
+ 'formatter' => env('LOG_STDERR_FORMATTER'),
+ 'with' => [
+ 'stream' => 'php://stderr',
+ ],
+ ],
+
+ 'syslog' => [
+ 'driver' => 'syslog',
+ 'level' => env('LOG_LEVEL', 'debug'),
+ ],
+
+ 'errorlog' => [
+ 'driver' => 'errorlog',
+ 'level' => env('LOG_LEVEL', 'debug'),
+ ],
+
+ 'null' => [
+ 'driver' => 'monolog',
+ 'handler' => NullHandler::class,
+ ],
+
+ 'emergency' => [
+ 'path' => storage_path('logs/laravel.log'),
+ ],
+ ],
+
+];
diff --git a/config/mail.php b/config/mail.php
new file mode 100644
index 000000000..f96c6c7c3
--- /dev/null
+++ b/config/mail.php
@@ -0,0 +1,118 @@
+ env('MAIL_MAILER', 'smtp'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Mailer Configurations
+ |--------------------------------------------------------------------------
+ |
+ | Here you may configure all of the mailers used by your application plus
+ | their respective settings. Several examples have been configured for
+ | you and you are free to add your own as your application requires.
+ |
+ | Laravel supports a variety of mail "transport" drivers to be used while
+ | sending an e-mail. You will specify which one you are using for your
+ | mailers below. You are free to add additional mailers as required.
+ |
+ | Supported: "smtp", "sendmail", "mailgun", "ses",
+ | "postmark", "log", "array", "failover"
+ |
+ */
+
+ 'mailers' => [
+ 'smtp' => [
+ 'transport' => 'smtp',
+ 'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
+ 'port' => env('MAIL_PORT', 587),
+ 'encryption' => env('MAIL_ENCRYPTION', 'tls'),
+ 'username' => env('MAIL_USERNAME'),
+ 'password' => env('MAIL_PASSWORD'),
+ 'timeout' => null,
+ 'auth_mode' => null,
+ ],
+
+ 'ses' => [
+ 'transport' => 'ses',
+ ],
+
+ 'mailgun' => [
+ 'transport' => 'mailgun',
+ ],
+
+ 'postmark' => [
+ 'transport' => 'postmark',
+ ],
+
+ 'sendmail' => [
+ 'transport' => 'sendmail',
+ 'path' => env('MAIL_SENDMAIL_PATH', '/usr/sbin/sendmail -t -i'),
+ ],
+
+ 'log' => [
+ 'transport' => 'log',
+ 'channel' => env('MAIL_LOG_CHANNEL'),
+ ],
+
+ 'array' => [
+ 'transport' => 'array',
+ ],
+
+ 'failover' => [
+ 'transport' => 'failover',
+ 'mailers' => [
+ 'smtp',
+ 'log',
+ ],
+ ],
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Global "From" Address
+ |--------------------------------------------------------------------------
+ |
+ | You may wish for all e-mails sent by your application to be sent from
+ | the same address. Here, you may specify a name and address that is
+ | used globally for all e-mails that are sent by your application.
+ |
+ */
+
+ 'from' => [
+ 'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'),
+ 'name' => env('MAIL_FROM_NAME', 'Example'),
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Markdown Mail Settings
+ |--------------------------------------------------------------------------
+ |
+ | If you are using Markdown based email rendering, you may configure your
+ | theme and component paths here, allowing you to customize the design
+ | of the emails. Or, you may simply stick with the Laravel defaults!
+ |
+ */
+
+ 'markdown' => [
+ 'theme' => 'default',
+
+ 'paths' => [
+ resource_path('views/vendor/mail'),
+ ],
+ ],
+
+];
diff --git a/config/queue.php b/config/queue.php
new file mode 100644
index 000000000..25ea5a819
--- /dev/null
+++ b/config/queue.php
@@ -0,0 +1,93 @@
+ env('QUEUE_CONNECTION', 'sync'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Queue Connections
+ |--------------------------------------------------------------------------
+ |
+ | Here you may configure the connection information for each server that
+ | is used by your application. A default configuration has been added
+ | for each back-end shipped with Laravel. You are free to add more.
+ |
+ | Drivers: "sync", "database", "beanstalkd", "sqs", "redis", "null"
+ |
+ */
+
+ 'connections' => [
+
+ 'sync' => [
+ 'driver' => 'sync',
+ ],
+
+ 'database' => [
+ 'driver' => 'database',
+ 'table' => 'jobs',
+ 'queue' => 'default',
+ 'retry_after' => 90,
+ 'after_commit' => false,
+ ],
+
+ 'beanstalkd' => [
+ 'driver' => 'beanstalkd',
+ 'host' => 'localhost',
+ 'queue' => 'default',
+ 'retry_after' => 90,
+ 'block_for' => 0,
+ 'after_commit' => false,
+ ],
+
+ 'sqs' => [
+ 'driver' => 'sqs',
+ 'key' => env('AWS_ACCESS_KEY_ID'),
+ 'secret' => env('AWS_SECRET_ACCESS_KEY'),
+ 'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'),
+ 'queue' => env('SQS_QUEUE', 'default'),
+ 'suffix' => env('SQS_SUFFIX'),
+ 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
+ 'after_commit' => false,
+ ],
+
+ 'redis' => [
+ 'driver' => 'redis',
+ 'connection' => 'default',
+ 'queue' => env('REDIS_QUEUE', 'default'),
+ 'retry_after' => 90,
+ 'block_for' => null,
+ 'after_commit' => false,
+ ],
+
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Failed Queue Jobs
+ |--------------------------------------------------------------------------
+ |
+ | These options configure the behavior of failed queue job logging so you
+ | can control which database and table are used to store the jobs that
+ | have failed. You may change them to any database / table you wish.
+ |
+ */
+
+ 'failed' => [
+ 'driver' => env('QUEUE_FAILED_DRIVER', 'database-uuids'),
+ 'database' => env('DB_CONNECTION', 'mysql'),
+ 'table' => 'failed_jobs',
+ ],
+
+];
diff --git a/config/sanctum.php b/config/sanctum.php
new file mode 100644
index 000000000..9281c92db
--- /dev/null
+++ b/config/sanctum.php
@@ -0,0 +1,65 @@
+ explode(',', env('SANCTUM_STATEFUL_DOMAINS', sprintf(
+ '%s%s',
+ 'localhost,localhost:3000,127.0.0.1,127.0.0.1:8000,::1',
+ env('APP_URL') ? ','.parse_url(env('APP_URL'), PHP_URL_HOST) : ''
+ ))),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Sanctum Guards
+ |--------------------------------------------------------------------------
+ |
+ | This array contains the authentication guards that will be checked when
+ | Sanctum is trying to authenticate a request. If none of these guards
+ | are able to authenticate the request, Sanctum will use the bearer
+ | token that's present on an incoming request for authentication.
+ |
+ */
+
+ 'guard' => ['web'],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Expiration Minutes
+ |--------------------------------------------------------------------------
+ |
+ | This value controls the number of minutes until an issued token will be
+ | considered expired. If this value is null, personal access tokens do
+ | not expire. This won't tweak the lifetime of first-party sessions.
+ |
+ */
+
+ 'expiration' => null,
+
+ /*
+ |--------------------------------------------------------------------------
+ | Sanctum Middleware
+ |--------------------------------------------------------------------------
+ |
+ | When authenticating your first-party SPA with Sanctum you may need to
+ | customize some of the middleware Sanctum uses while processing the
+ | request. You may change the middleware listed below as required.
+ |
+ */
+
+ 'middleware' => [
+ 'verify_csrf_token' => App\Http\Middleware\VerifyCsrfToken::class,
+ 'encrypt_cookies' => App\Http\Middleware\EncryptCookies::class,
+ ],
+
+];
diff --git a/config/scribe.php b/config/scribe.php
new file mode 100644
index 000000000..33e8a833d
--- /dev/null
+++ b/config/scribe.php
@@ -0,0 +1,383 @@
+ 'default',
+
+ /*
+ * The HTML for the generated documentation. If this is empty, Scribe will infer it from config('app.name').
+ */
+ 'title' => null,
+
+ /*
+ * A short description of your API. Will be included in the docs webpage, Postman collection and OpenAPI spec.
+ */
+ 'description' => 'API developed for backend test of Coderockr!',
+
+ /*
+ * The base URL displayed in the docs. If this is empty, Scribe will use the value of config('app.url').
+ */
+ 'base_url' => 'http://localhost:8888',
+
+ /*
+ * Tell Scribe what routes to generate documentation for.
+ * Each group contains rules defining which routes should be included ('match', 'include' and 'exclude' sections)
+ * and settings which should be applied to them ('apply' section).
+ */
+ 'routes' => [
+ [
+ /*
+ * Specify conditions to determine what routes will be a part of this group.
+ * A route must fulfill ALL conditions to be included.
+ */
+ 'match' => [
+ /*
+ * Match only routes whose paths match this pattern (use * as a wildcard to match any characters). Example: 'users/*'.
+ */
+ 'prefixes' => ['api/*'],
+
+ /*
+ * Match only routes whose domains match this pattern (use * as a wildcard to match any characters). Example: 'api.*'.
+ */
+ 'domains' => ['*'],
+
+ /*
+ * [Dingo router only] Match only routes registered under this version. Wildcards are not supported.
+ */
+ 'versions' => ['v1'],
+ ],
+
+ /*
+ * Include these routes even if they did not match the rules above.
+ * The route can be referenced by name or path here. Wildcards are supported.
+ */
+ 'include' => [
+ // 'users.index', 'healthcheck*'
+ ],
+
+ /*
+ * Exclude these routes even if they matched the rules above.
+ * The route can be referenced by name or path here. Wildcards are supported.
+ */
+ 'exclude' => [
+ // '/health', 'admin.*'
+ ],
+
+ /*
+ * Settings to be applied to all the matched routes in this group when generating documentation
+ */
+ 'apply' => [
+ /*
+ * Additional headers to be added to the example requests
+ */
+ 'headers' => [
+ 'Content-Type' => 'application/json',
+ 'Accept' => 'application/json',
+ ],
+
+ /*
+ * If no @response or @transformer declarations are found for the route,
+ * Scribe will try to get a sample response by attempting an API call.
+ * Configure the settings for the API call here.
+ */
+ 'response_calls' => [
+ /*
+ * API calls will be made only for routes in this group matching these HTTP methods (GET, POST, etc).
+ * List the methods here or use '*' to mean all methods. Leave empty to disable API calls.
+ */
+ 'methods' => ['GET'],
+
+ /*
+ * Laravel config variables which should be set for the API call.
+ * This is a good place to ensure that notifications, emails and other external services
+ * are not triggered during the documentation API calls.
+ * You can also create a `.env.docs` file and run the generate command with `--env docs`.
+ */
+ 'config' => [
+ 'app.env' => 'documentation',
+ // 'app.debug' => false,
+ ],
+
+ /*
+ * Query parameters which should be sent with the API call.
+ */
+ 'queryParams' => [
+ // 'key' => 'value',
+ ],
+
+ /*
+ * Body parameters which should be sent with the API call.
+ */
+ 'bodyParams' => [
+ // 'key' => 'value',
+ ],
+
+ /*
+ * Files which should be sent with the API call.
+ * Each value should be a valid path (absolute or relative to your project directory) to a file on this machine (but not in the project root).
+ */
+ 'fileParams' => [
+ // 'key' => 'storage/app/image.png',
+ ],
+
+ /*
+ * Cookies which should be sent with the API call.
+ */
+ 'cookies' => [
+ // 'name' => 'value'
+ ],
+ ],
+ ],
+ ],
+ ],
+
+ /*
+ * The type of documentation output to generate.
+ * - "static" will generate a static HTMl page in the /public/docs folder,
+ * - "laravel" will generate the documentation as a Blade view, so you can add routing and authentication.
+ */
+ 'type' => 'laravel',
+
+ /*
+ * Settings for `static` type output.
+ */
+ 'static' => [
+ /*
+ * HTML documentation, assets and Postman collection will be generated to this folder.
+ * Source Markdown will still be in resources/docs.
+ */
+ 'output_path' => 'public/docs',
+ ],
+
+ /*
+ * Settings for `laravel` type output.
+ */
+ 'laravel' => [
+ /*
+ * Whether to automatically create a docs endpoint for you to view your generated docs.
+ * If this is false, you can still set up routing manually.
+ */
+ 'add_routes' => true,
+
+ /*
+ * URL path to use for the docs endpoint (if `add_routes` is true).
+ * By default, `/docs` opens the HTML page, `/docs.postman` opens the Postman collection, and `/docs.openapi` the OpenAPI spec.
+ */
+ 'docs_url' => '/docs',
+
+ /*
+ * Middleware to attach to the docs endpoint (if `add_routes` is true).
+ */
+ 'middleware' => [],
+ ],
+
+ 'try_it_out' => [
+ /**
+ * Add a Try It Out button to your endpoints so consumers can test endpoints right from their browser.
+ * Don't forget to enable CORS headers for your endpoints.
+ */
+ 'enabled' => true,
+
+ /**
+ * The base URL for the API tester to use (for example, you can set this to your staging URL).
+ * Leave as null to use the current app URL (config(app.url)).
+ */
+ 'base_url' => null,
+
+ /**
+ * Fetch a CSRF token before each request, and add it as an X-XSRF-TOKEN header. Needed if you're using Laravel Sanctum.
+ */
+ 'use_csrf' => false,
+
+ /**
+ * The URL to fetch the CSRF token from (if `use_csrf` is true).
+ */
+ 'csrf_url' => '/sanctum/csrf-cookie',
+ ],
+
+ /*
+ * How is your API authenticated? This information will be used in the displayed docs, generated examples and response calls.
+ */
+ 'auth' => [
+ /*
+ * Set this to true if any endpoints in your API use authentication.
+ */
+ 'enabled' => false,
+
+ /*
+ * Set this to true if your API should be authenticated by default. If so, you must also set `enabled` (above) to true.
+ * You can then use @unauthenticated or @authenticated on individual endpoints to change their status from the default.
+ */
+ 'default' => false,
+
+ /*
+ * Where is the auth value meant to be sent in a request?
+ * Options: query, body, basic, bearer, header (for custom header)
+ */
+ 'in' => 'bearer',
+
+ /*
+ * The name of the auth parameter (eg token, key, apiKey) or header (eg Authorization, Api-Key).
+ */
+ 'name' => 'key',
+
+ /*
+ * The value of the parameter to be used by Scribe to authenticate response calls.
+ * This will NOT be included in the generated documentation.
+ * If this value is empty, Scribe will use a random value.
+ */
+ 'use_value' => env('SCRIBE_AUTH_KEY'),
+
+ /*
+ * Placeholder your users will see for the auth parameter in the example requests.
+ * Set this to null if you want Scribe to use a random value as placeholder instead.
+ */
+ 'placeholder' => '{YOUR_AUTH_KEY}',
+
+ /*
+ * Any extra authentication-related info for your users. For instance, you can describe how to find or generate their auth credentials.
+ * Markdown and HTML are supported.
+ */
+ 'extra_info' => 'You can retrieve your token by visiting your dashboard and clicking Generate API token .',
+ ],
+
+ /*
+ * Text to place in the "Introduction" section, right after the `description`. Markdown and HTML are supported.
+ */
+ 'intro_text' => <<As you scroll, you'll see code examples for working with the API in different programming languages in the dark area to the right (or as part of the content on mobile).
+You can switch the language used with the tabs at the top right (or from the nav menu at the top left on mobile).
+INTRO
+ ,
+
+ /*
+ * Example requests for each endpoint will be shown in each of these languages.
+ * Supported options are: bash, javascript, php, python
+ * To add a language of your own, see https://scribe.knuckles.wtf/laravel/advanced/example-requests
+ *
+ */
+ 'example_languages' => [
+ 'bash',
+ 'javascript',
+ ],
+
+ /*
+ * Generate a Postman collection (v2.1.0) in addition to HTML docs.
+ * For 'static' docs, the collection will be generated to public/docs/collection.json.
+ * For 'laravel' docs, it will be generated to storage/app/scribe/collection.json.
+ * Setting `laravel.add_routes` to true (above) will also add a route for the collection.
+ */
+ 'postman' => [
+ 'enabled' => true,
+
+ /*
+ * Manually override some generated content in the spec. Dot notation is supported.
+ */
+ 'overrides' => [
+ // 'info.version' => '2.0.0',
+ ],
+ ],
+
+ /*
+ * Generate an OpenAPI spec (v3.0.1) in addition to docs webpage.
+ * For 'static' docs, the collection will be generated to public/docs/openapi.yaml.
+ * For 'laravel' docs, it will be generated to storage/app/scribe/openapi.yaml.
+ * Setting `laravel.add_routes` to true (above) will also add a route for the spec.
+ */
+ 'openapi' => [
+ 'enabled' => true,
+
+ /*
+ * Manually override some generated content in the spec. Dot notation is supported.
+ */
+ 'overrides' => [
+ // 'info.version' => '2.0.0',
+ ],
+ ],
+
+ /*
+ * Endpoints which don't have a @group will be placed in this default group.
+ */
+ 'default_group' => 'Endpoints',
+
+ /*
+ * Custom logo path. This will be used as the value of the src attribute for the tag,
+ * so make sure it points to an accessible URL or path. Set to false to not use a logo.
+ *
+ * For example, if your logo is in public/img:
+ * - 'logo' => '../img/logo.png' // for `static` type (output folder is public/docs)
+ * - 'logo' => 'img/logo.png' // for `laravel` type
+ *
+ */
+ 'logo' => false,
+
+ /*
+ * If you would like the package to generate the same example values for parameters on each run,
+ * set this to any number (eg. 1234)
+ */
+ 'faker_seed' => null,
+
+ /**
+ * The strategies Scribe will use to extract information about your routes at each stage.
+ * If you create or install a custom strategy, add it here.
+ */
+ 'strategies' => [
+ 'metadata' => [
+ Strategies\Metadata\GetFromDocBlocks::class,
+ ],
+ 'urlParameters' => [
+ Strategies\UrlParameters\GetFromLaravelAPI::class,
+ Strategies\UrlParameters\GetFromLumenAPI::class,
+ Strategies\UrlParameters\GetFromUrlParamTag::class,
+ ],
+ 'queryParameters' => [
+ Strategies\QueryParameters\GetFromFormRequest::class,
+ Strategies\QueryParameters\GetFromInlineValidator::class,
+ Strategies\QueryParameters\GetFromQueryParamTag::class,
+ ],
+ 'headers' => [
+ Strategies\Headers\GetFromRouteRules::class,
+ Strategies\Headers\GetFromHeaderTag::class,
+ ],
+ 'bodyParameters' => [
+ Strategies\BodyParameters\GetFromFormRequest::class,
+ Strategies\BodyParameters\GetFromInlineValidator::class,
+ Strategies\BodyParameters\GetFromBodyParamTag::class,
+ ],
+ 'responses' => [
+ Strategies\Responses\UseTransformerTags::class,
+ Strategies\Responses\UseApiResourceTags::class,
+ Strategies\Responses\UseResponseTag::class,
+ Strategies\Responses\UseResponseFileTag::class,
+ Strategies\Responses\ResponseCalls::class,
+ ],
+ 'responseFields' => [
+ Strategies\ResponseFields\GetFromResponseFieldTag::class,
+ ],
+ ],
+
+ 'fractal' => [
+ /* If you are using a custom serializer with league/fractal, you can specify it here.
+ * Leave as null to use no serializer or return simple JSON.
+ */
+ 'serializer' => null,
+ ],
+
+ /*
+ * [Advanced] Custom implementation of RouteMatcherInterface to customise how routes are matched
+ *
+ */
+ 'routeMatcher' => \Knuckles\Scribe\Matching\RouteMatcher::class,
+
+ /**
+ * For response calls, API resource responses and transformer responses,
+ * Scribe will try to start database transactions, so no changes are persisted to your database.
+ * Tell Scribe which connections should be transacted here.
+ * If you only use one db connection, you can leave this as is.
+ */
+ 'database_connections_to_transact' => [config('database.default')]
+];
diff --git a/config/services.php b/config/services.php
new file mode 100644
index 000000000..2a1d616c7
--- /dev/null
+++ b/config/services.php
@@ -0,0 +1,33 @@
+ [
+ 'domain' => env('MAILGUN_DOMAIN'),
+ 'secret' => env('MAILGUN_SECRET'),
+ 'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'),
+ ],
+
+ 'postmark' => [
+ 'token' => env('POSTMARK_TOKEN'),
+ ],
+
+ 'ses' => [
+ 'key' => env('AWS_ACCESS_KEY_ID'),
+ 'secret' => env('AWS_SECRET_ACCESS_KEY'),
+ 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
+ ],
+
+];
diff --git a/config/session.php b/config/session.php
new file mode 100644
index 000000000..ac0802b19
--- /dev/null
+++ b/config/session.php
@@ -0,0 +1,201 @@
+ env('SESSION_DRIVER', 'file'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Session Lifetime
+ |--------------------------------------------------------------------------
+ |
+ | Here you may specify the number of minutes that you wish the session
+ | to be allowed to remain idle before it expires. If you want them
+ | to immediately expire on the browser closing, set that option.
+ |
+ */
+
+ 'lifetime' => env('SESSION_LIFETIME', 120),
+
+ 'expire_on_close' => false,
+
+ /*
+ |--------------------------------------------------------------------------
+ | Session Encryption
+ |--------------------------------------------------------------------------
+ |
+ | This option allows you to easily specify that all of your session data
+ | should be encrypted before it is stored. All encryption will be run
+ | automatically by Laravel and you can use the Session like normal.
+ |
+ */
+
+ 'encrypt' => false,
+
+ /*
+ |--------------------------------------------------------------------------
+ | Session File Location
+ |--------------------------------------------------------------------------
+ |
+ | When using the native session driver, we need a location where session
+ | files may be stored. A default has been set for you but a different
+ | location may be specified. This is only needed for file sessions.
+ |
+ */
+
+ 'files' => storage_path('framework/sessions'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Session Database Connection
+ |--------------------------------------------------------------------------
+ |
+ | When using the "database" or "redis" session drivers, you may specify a
+ | connection that should be used to manage these sessions. This should
+ | correspond to a connection in your database configuration options.
+ |
+ */
+
+ 'connection' => env('SESSION_CONNECTION', null),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Session Database Table
+ |--------------------------------------------------------------------------
+ |
+ | When using the "database" session driver, you may specify the table we
+ | should use to manage the sessions. Of course, a sensible default is
+ | provided for you; however, you are free to change this as needed.
+ |
+ */
+
+ 'table' => 'sessions',
+
+ /*
+ |--------------------------------------------------------------------------
+ | Session Cache Store
+ |--------------------------------------------------------------------------
+ |
+ | While using one of the framework's cache driven session backends you may
+ | list a cache store that should be used for these sessions. This value
+ | must match with one of the application's configured cache "stores".
+ |
+ | Affects: "apc", "dynamodb", "memcached", "redis"
+ |
+ */
+
+ 'store' => env('SESSION_STORE', null),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Session Sweeping Lottery
+ |--------------------------------------------------------------------------
+ |
+ | Some session drivers must manually sweep their storage location to get
+ | rid of old sessions from storage. Here are the chances that it will
+ | happen on a given request. By default, the odds are 2 out of 100.
+ |
+ */
+
+ 'lottery' => [2, 100],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Session Cookie Name
+ |--------------------------------------------------------------------------
+ |
+ | Here you may change the name of the cookie used to identify a session
+ | instance by ID. The name specified here will get used every time a
+ | new session cookie is created by the framework for every driver.
+ |
+ */
+
+ 'cookie' => env(
+ 'SESSION_COOKIE',
+ Str::slug(env('APP_NAME', 'laravel'), '_').'_session'
+ ),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Session Cookie Path
+ |--------------------------------------------------------------------------
+ |
+ | The session cookie path determines the path for which the cookie will
+ | be regarded as available. Typically, this will be the root path of
+ | your application but you are free to change this when necessary.
+ |
+ */
+
+ 'path' => '/',
+
+ /*
+ |--------------------------------------------------------------------------
+ | Session Cookie Domain
+ |--------------------------------------------------------------------------
+ |
+ | Here you may change the domain of the cookie used to identify a session
+ | in your application. This will determine which domains the cookie is
+ | available to in your application. A sensible default has been set.
+ |
+ */
+
+ 'domain' => env('SESSION_DOMAIN', null),
+
+ /*
+ |--------------------------------------------------------------------------
+ | HTTPS Only Cookies
+ |--------------------------------------------------------------------------
+ |
+ | By setting this option to true, session cookies will only be sent back
+ | to the server if the browser has a HTTPS connection. This will keep
+ | the cookie from being sent to you when it can't be done securely.
+ |
+ */
+
+ 'secure' => env('SESSION_SECURE_COOKIE'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | HTTP Access Only
+ |--------------------------------------------------------------------------
+ |
+ | Setting this value to true will prevent JavaScript from accessing the
+ | value of the cookie and the cookie will only be accessible through
+ | the HTTP protocol. You are free to modify this option if needed.
+ |
+ */
+
+ 'http_only' => true,
+
+ /*
+ |--------------------------------------------------------------------------
+ | Same-Site Cookies
+ |--------------------------------------------------------------------------
+ |
+ | This option determines how your cookies behave when cross-site requests
+ | take place, and can be used to mitigate CSRF attacks. By default, we
+ | will set this value to "lax" since this is a secure default value.
+ |
+ | Supported: "lax", "strict", "none", null
+ |
+ */
+
+ 'same_site' => 'lax',
+
+];
diff --git a/config/view.php b/config/view.php
new file mode 100644
index 000000000..22b8a18d3
--- /dev/null
+++ b/config/view.php
@@ -0,0 +1,36 @@
+ [
+ resource_path('views'),
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Compiled View Path
+ |--------------------------------------------------------------------------
+ |
+ | This option determines where all the compiled Blade templates will be
+ | stored for your application. Typically, this is within the storage
+ | directory. However, as usual, you are free to change this value.
+ |
+ */
+
+ 'compiled' => env(
+ 'VIEW_COMPILED_PATH',
+ realpath(storage_path('framework/views'))
+ ),
+
+];
diff --git a/database/.gitignore b/database/.gitignore
new file mode 100644
index 000000000..9b19b93c9
--- /dev/null
+++ b/database/.gitignore
@@ -0,0 +1 @@
+*.sqlite*
diff --git a/database/factories/UserFactory.php b/database/factories/UserFactory.php
new file mode 100644
index 000000000..a3eb239a9
--- /dev/null
+++ b/database/factories/UserFactory.php
@@ -0,0 +1,39 @@
+ $this->faker->name(),
+ 'email' => $this->faker->unique()->safeEmail(),
+ 'email_verified_at' => now(),
+ 'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password
+ 'remember_token' => Str::random(10),
+ ];
+ }
+
+ /**
+ * Indicate that the model's email address should be unverified.
+ *
+ * @return \Illuminate\Database\Eloquent\Factories\Factory
+ */
+ public function unverified()
+ {
+ return $this->state(function (array $attributes) {
+ return [
+ 'email_verified_at' => null,
+ ];
+ });
+ }
+}
diff --git a/database/migrations/2014_10_12_000000_create_users_table.php b/database/migrations/2014_10_12_000000_create_users_table.php
new file mode 100644
index 000000000..1b2d4a4ae
--- /dev/null
+++ b/database/migrations/2014_10_12_000000_create_users_table.php
@@ -0,0 +1,36 @@
+increments("id");
+ $table->string('name');
+ $table->string('email')->unique();
+ $table->timestamp('email_verified_at')->nullable();
+ $table->string('password');
+ $table->rememberToken();
+ $table->timestamps();
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ Schema::dropIfExists('users');
+ }
+}
diff --git a/database/migrations/2014_10_12_100000_create_password_resets_table.php b/database/migrations/2014_10_12_100000_create_password_resets_table.php
new file mode 100644
index 000000000..0ee0a36a4
--- /dev/null
+++ b/database/migrations/2014_10_12_100000_create_password_resets_table.php
@@ -0,0 +1,32 @@
+string('email')->index();
+ $table->string('token');
+ $table->timestamp('created_at')->nullable();
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ Schema::dropIfExists('password_resets');
+ }
+}
diff --git a/database/migrations/2019_08_19_000000_create_failed_jobs_table.php b/database/migrations/2019_08_19_000000_create_failed_jobs_table.php
new file mode 100644
index 000000000..6aa6d743e
--- /dev/null
+++ b/database/migrations/2019_08_19_000000_create_failed_jobs_table.php
@@ -0,0 +1,36 @@
+id();
+ $table->string('uuid')->unique();
+ $table->text('connection');
+ $table->text('queue');
+ $table->longText('payload');
+ $table->longText('exception');
+ $table->timestamp('failed_at')->useCurrent();
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ Schema::dropIfExists('failed_jobs');
+ }
+}
diff --git a/database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php b/database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php
new file mode 100644
index 000000000..4315e16a8
--- /dev/null
+++ b/database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php
@@ -0,0 +1,36 @@
+id();
+ $table->morphs('tokenable');
+ $table->string('name');
+ $table->string('token', 64)->unique();
+ $table->text('abilities')->nullable();
+ $table->timestamp('last_used_at')->nullable();
+ $table->timestamps();
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ Schema::dropIfExists('personal_access_tokens');
+ }
+}
diff --git a/database/migrations/2022_03_10_004812_create_investments_table.php b/database/migrations/2022_03_10_004812_create_investments_table.php
new file mode 100644
index 000000000..6fe3627d3
--- /dev/null
+++ b/database/migrations/2022_03_10_004812_create_investments_table.php
@@ -0,0 +1,37 @@
+id();
+ $table->date("create_date");
+ $table->double("amount");
+ $table->timestamps();
+ $table->integer("owner")->unsigned();
+ $table->foreign("owner")
+ ->references("id")->on("users")
+ ->onDelete("cascade");
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ Schema::dropIfExists('investments');
+ }
+}
diff --git a/database/migrations/2022_03_11_130208_add_withdrawal_date_to_investments_table.php b/database/migrations/2022_03_11_130208_add_withdrawal_date_to_investments_table.php
new file mode 100644
index 000000000..56d55b655
--- /dev/null
+++ b/database/migrations/2022_03_11_130208_add_withdrawal_date_to_investments_table.php
@@ -0,0 +1,33 @@
+date("withdrawal_date")->nullable();
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ Schema::table('investments', function (Blueprint $table) {
+ //
+ });
+ }
+}
diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php
new file mode 100644
index 000000000..6036e3856
--- /dev/null
+++ b/database/seeders/DatabaseSeeder.php
@@ -0,0 +1,22 @@
+call([
+ UserSeeder::class,
+ InvestmentSeeder::class
+ ]);
+ }
+}
diff --git a/database/seeders/InvestmentSeeder.php b/database/seeders/InvestmentSeeder.php
new file mode 100644
index 000000000..35d9ebdd6
--- /dev/null
+++ b/database/seeders/InvestmentSeeder.php
@@ -0,0 +1,42 @@
+insert([
+ ['owner' => '1',
+ 'amount' => '1000',
+ 'create_date' => '2022-03-10'],
+ ['owner' => '1',
+ 'amount' => '5000',
+ 'create_date' => '2012-03-10'],
+ ['owner' => '2',
+ 'amount' => '900',
+ 'create_date' => '2020-03-10'],
+ ['owner' => '2',
+ 'amount' => '300',
+ 'create_date' => '2021-05-03'],
+ ['owner' => '3',
+ 'amount' => '3000',
+ 'create_date' => '2021-01-25'],
+ ['owner' => '3',
+ 'amount' => '2000',
+ 'create_date' => '2021-06-25'],
+ ['owner' => '3',
+ 'amount' => '5000',
+ 'create_date' => '2022-01-25']
+ ]);
+ }
+}
diff --git a/database/seeders/UserSeeder.php b/database/seeders/UserSeeder.php
new file mode 100644
index 000000000..ed3a194b2
--- /dev/null
+++ b/database/seeders/UserSeeder.php
@@ -0,0 +1,31 @@
+insert([
+ ['name' => 'Investor 1',
+ 'email' => 'investor1@test.com',
+ 'password' => Hash::make('12345678')],
+ ['name' => 'Investor 2',
+ 'email' => 'investor2@test.com',
+ 'password' => Hash::make('12345678')],
+ ['name' => 'Investor 2',
+ 'email' => 'investor3@test.com',
+ 'password' => Hash::make('12345678')]
+ ]);
+ }
+}
diff --git a/laradock/.devcontainer/devcontainer.example.json b/laradock/.devcontainer/devcontainer.example.json
new file mode 100644
index 000000000..f6399cec9
--- /dev/null
+++ b/laradock/.devcontainer/devcontainer.example.json
@@ -0,0 +1,14 @@
+{
+ "name": "Laradock",
+ "dockerComposeFile": "../docker-compose.yml",
+ "remoteUser": "laradock",
+ "runServices": [
+ "nginx",
+ "postgres",
+ "pgadmin"
+ ],
+ "service": "workspace",
+ "workspaceFolder": "/var/www",
+ "shutdownAction": "stopCompose",
+ "postCreateCommand": "uname -a"
+}
diff --git a/laradock/.editorconfig b/laradock/.editorconfig
new file mode 100644
index 000000000..9a397cfcc
--- /dev/null
+++ b/laradock/.editorconfig
@@ -0,0 +1,12 @@
+root = true
+
+[*]
+end_of_line = lf
+insert_final_newline = true
+
+[*]
+charset = utf-8
+
+[{Dockerfile,docker-compose.yml}]
+indent_style = space
+indent_size = 2
diff --git a/laradock/.env.example b/laradock/.env.example
new file mode 100644
index 000000000..60a97a15e
--- /dev/null
+++ b/laradock/.env.example
@@ -0,0 +1,1042 @@
+###########################################################
+###################### General Setup ######################
+###########################################################
+
+### Paths #################################################
+
+# Point to the path of your applications code on your host
+APP_CODE_PATH_HOST=../
+
+# Point to where the `APP_CODE_PATH_HOST` should be in the container
+APP_CODE_PATH_CONTAINER=/var/www
+
+# You may add flags to the path `:cached`, `:delegated`. When using Docker Sync add `:nocopy`
+APP_CODE_CONTAINER_FLAG=:cached
+
+# Choose storage path on your machine. For all storage systems
+DATA_PATH_HOST=~/.laradock/data
+
+### Drivers ################################################
+
+# All volumes driver
+VOLUMES_DRIVER=local
+
+# All Networks driver
+NETWORKS_DRIVER=bridge
+
+### Docker compose files ##################################
+
+# Select which docker-compose files to include. If using docker-sync append `:docker-compose.sync.yml` at the end
+COMPOSE_FILE=docker-compose.yml
+
+# Change the separator from : to ; on Windows
+COMPOSE_PATH_SEPARATOR=:
+
+# Define the prefix of container names. This is useful if you have multiple projects that use laradock to have separate containers per project.
+COMPOSE_PROJECT_NAME=laradock
+
+### PHP Version ###########################################
+
+# Select a PHP version of the Workspace and PHP-FPM containers (Does not apply to HHVM).
+# Accepted values: 8.0 - 7.4 - 7.3 - 7.2 - 7.1 - 7.0 - 5.6
+PHP_VERSION=7.4
+
+### Phalcon Version ###########################################
+
+# Select a Phalcon version of the Workspace and PHP-FPM containers (Does not apply to HHVM). Accepted values: 3.4.0+
+PHALCON_VERSION=4.0.5
+
+### PHP Interpreter #######################################
+
+# Select the PHP Interpreter. Accepted values: hhvm - php-fpm
+PHP_INTERPRETER=php-fpm
+
+### Docker Host IP ########################################
+
+# Enter your Docker Host IP (will be appended to /etc/hosts). Default is `10.0.75.1`
+DOCKER_HOST_IP=10.0.75.1
+
+### Remote Interpreter ####################################
+
+# Choose a Remote Interpreter entry matching name. Default is `laradock`
+PHP_IDE_CONFIG=serverName=laradock
+
+### PHP DOWNGRADEOPENSSL TLS AND SECLEVEL #################
+
+PHP_DOWNGRADE_OPENSSL_TLS_AND_SECLEVEL=false
+
+### Windows Path ##########################################
+
+# A fix for Windows users, to ensure the application path works
+COMPOSE_CONVERT_WINDOWS_PATHS=1
+
+### Environment ###########################################
+
+# If you need to change the sources (i.e. to China), set CHANGE_SOURCE to true
+CHANGE_SOURCE=false
+# Set ORACLE INSTANT_CLIENT_MIRROR option if you want to use Intranet improve download, you can download files first
+ORACLE_INSTANT_CLIENT_MIRROR=https://github.com/diogomascarenha/oracle-instantclient/raw/master/
+
+### Docker Sync ###########################################
+
+# If you are using Docker Sync. For `osx` use 'native_osx', for `windows` use 'unison', for `linux` docker-sync is not required
+DOCKER_SYNC_STRATEGY=native_osx
+
+### Install Oh My ZSH! ####################################
+
+# If you want to use "Oh My ZSH!" with Laravel autocomplete plugin, set SHELL_OH_MY_ZSH to true.
+
+SHELL_OH_MY_ZSH=false
+SHELL_OH_MY_ZSH_AUTOSUGESTIONS=false
+SHELL_OH_MY_ZSH_ALIASES=false
+
+###########################################################
+################ Containers Customization #################
+###########################################################
+
+### WORKSPACE #############################################
+
+WORKSPACE_BASE_IMAGE_TAG_PREFIX=latest
+WORKSPACE_COMPOSER_GLOBAL_INSTALL=true
+WORKSPACE_COMPOSER_VERSION=2
+WORKSPACE_COMPOSER_AUTH=false
+WORKSPACE_COMPOSER_REPO_PACKAGIST=
+WORKSPACE_NVM_NODEJS_ORG_MIRROR=
+WORKSPACE_INSTALL_NODE=true
+WORKSPACE_NODE_VERSION=node
+WORKSPACE_NPM_REGISTRY=
+WORKSPACE_NPM_FETCH_RETRIES=2
+WORKSPACE_NPM_FETCH_RETRY_FACTOR=10
+WORKSPACE_NPM_FETCH_RETRY_MINTIMEOUT=10000
+WORKSPACE_NPM_FETCH_RETRY_MAXTIMEOUT=60000
+WORKSPACE_INSTALL_PNPM=false
+WORKSPACE_INSTALL_YARN=true
+WORKSPACE_YARN_VERSION=latest
+WORKSPACE_INSTALL_NPM_GULP=true
+WORKSPACE_INSTALL_NPM_BOWER=false
+WORKSPACE_INSTALL_NPM_VUE_CLI=true
+WORKSPACE_INSTALL_NPM_ANGULAR_CLI=false
+WORKSPACE_INSTALL_PHPREDIS=true
+WORKSPACE_INSTALL_WORKSPACE_SSH=false
+WORKSPACE_INSTALL_SUBVERSION=false
+WORKSPACE_INSTALL_BZ2=false
+WORKSPACE_INSTALL_GMP=false
+WORKSPACE_INSTALL_GNUPG=false
+WORKSPACE_INSTALL_XDEBUG=false
+WORKSPACE_INSTALL_PCOV=false
+WORKSPACE_INSTALL_PHPDBG=false
+WORKSPACE_INSTALL_SSH2=false
+WORKSPACE_INSTALL_LDAP=false
+WORKSPACE_INSTALL_SOAP=false
+WORKSPACE_INSTALL_XSL=false
+WORKSPACE_INSTALL_SMB=false
+WORKSPACE_INSTALL_IMAP=false
+WORKSPACE_INSTALL_MONGO=false
+WORKSPACE_INSTALL_AMQP=false
+WORKSPACE_INSTALL_CASSANDRA=false
+WORKSPACE_INSTALL_ZMQ=false
+WORKSPACE_INSTALL_GEARMAN=false
+WORKSPACE_INSTALL_MSSQL=false
+WORKSPACE_INSTALL_DRUSH=false
+WORKSPACE_DRUSH_VERSION=8.4.6
+WORKSPACE_INSTALL_DRUPAL_CONSOLE=false
+WORKSPACE_INSTALL_WP_CLI=false
+WORKSPACE_INSTALL_AEROSPIKE=false
+WORKSPACE_INSTALL_OCI8=false
+WORKSPACE_INSTALL_V8JS=false
+WORKSPACE_INSTALL_LARAVEL_ENVOY=false
+WORKSPACE_INSTALL_LARAVEL_INSTALLER=false
+WORKSPACE_INSTALL_XLSWRITER=false
+WORKSPACE_INSTALL_DEPLOYER=false
+WORKSPACE_INSTALL_PRESTISSIMO=false
+WORKSPACE_INSTALL_LINUXBREW=false
+WORKSPACE_INSTALL_MC=false
+WORKSPACE_INSTALL_SYMFONY=false
+WORKSPACE_INSTALL_PYTHON=false
+WORKSPACE_INSTALL_PYTHON3=false
+WORKSPACE_INSTALL_POWERLINE=false
+WORKSPACE_INSTALL_SUPERVISOR=false
+WORKSPACE_INSTALL_IMAGE_OPTIMIZERS=false
+WORKSPACE_INSTALL_IMAGEMAGICK=false
+WORKSPACE_IMAGEMAGICK_VERSION=latest
+WORKSPACE_INSTALL_TERRAFORM=false
+WORKSPACE_INSTALL_DUSK_DEPS=false
+WORKSPACE_INSTALL_PG_CLIENT=false
+WORKSPACE_INSTALL_PHALCON=false
+WORKSPACE_INSTALL_SWOOLE=false
+WORKSPACE_INSTALL_TAINT=false
+WORKSPACE_INSTALL_LIBPNG=false
+WORKSPACE_INSTALL_GRAPHVIZ=false
+WORKSPACE_INSTALL_IONCUBE=false # PHP 8.0 is not supported yet. Reference: https://forum.ioncube.com/viewtopic.php?t=4592
+WORKSPACE_INSTALL_MYSQL_CLIENT=false
+WORKSPACE_INSTALL_PING=false
+WORKSPACE_INSTALL_SSHPASS=false
+WORKSPACE_INSTALL_INOTIFY=false
+WORKSPACE_INSTALL_FSWATCH=false
+WORKSPACE_INSTALL_YAML=false
+WORKSPACE_INSTALL_RDKAFKA=false
+WORKSPACE_INSTALL_MAILPARSE=false
+WORKSPACE_INSTALL_XMLRPC=false
+WORKSPACE_PUID=1000
+WORKSPACE_PGID=1000
+WORKSPACE_CHROME_DRIVER_VERSION=2.42
+WORKSPACE_TIMEZONE=UTC
+WORKSPACE_SSH_PORT=2222
+WORKSPACE_INSTALL_FFMPEG=false
+WORKSPACE_INSTALL_AUDIOWAVEFORM=false
+WORKSPACE_INSTALL_WKHTMLTOPDF=false
+WORKSPACE_INSTALL_GNU_PARALLEL=false
+WORKSPACE_INSTALL_AST=true
+WORKSPACE_AST_VERSION=1.0.10
+WORKSPACE_BROWSERSYNC_HOST_PORT=3000
+WORKSPACE_BROWSERSYNC_UI_HOST_PORT=3001
+WORKSPACE_VUE_CLI_SERVE_HOST_PORT=8080
+WORKSPACE_VUE_CLI_UI_HOST_PORT=8001
+WORKSPACE_ANGULAR_CLI_SERVE_HOST_PORT=4200
+WORKSPACE_INSTALL_GIT_PROMPT=false
+WORKSPACE_INSTALL_DOCKER_CLIENT=false
+WORKSPACE_INSTALL_LNAV=false
+WORKSPACE_INSTALL_PROTOC=false
+WORKSPACE_INSTALL_PHPDECIMAL=false
+WORKSPACE_INSTALL_ZOOKEEPER=false
+WORKSPACE_INSTALL_SSDB=false
+WORKSPACE_INSTALL_TRADER=false
+WORKSPACE_PROTOC_VERSION=latest
+WORKSPACE_INSTALL_MEMCACHED=true
+
+### PHP_FPM ###############################################
+
+PHP_FPM_BASE_IMAGE_TAG_PREFIX=latest
+PHP_FPM_INSTALL_BCMATH=true
+PHP_FPM_INSTALL_MYSQLI=true
+PHP_FPM_INSTALL_INTL=true
+PHP_FPM_INSTALL_IMAGEMAGICK=true
+PHP_FPM_IMAGEMAGICK_VERSION=latest
+PHP_FPM_INSTALL_OPCACHE=true
+PHP_FPM_INSTALL_IMAGE_OPTIMIZERS=true
+PHP_FPM_INSTALL_PHPREDIS=true
+PHP_FPM_INSTALL_MEMCACHED=false
+PHP_FPM_INSTALL_BZ2=false
+PHP_FPM_INSTALL_ENCHANT=false
+PHP_FPM_INSTALL_GMP=false
+PHP_FPM_INSTALL_GNUPG=false
+PHP_FPM_INSTALL_XDEBUG=false
+PHP_FPM_INSTALL_PCOV=false
+PHP_FPM_INSTALL_XHPROF=false
+PHP_FPM_INSTALL_PHPDBG=false
+PHP_FPM_INSTALL_SMB=false
+PHP_FPM_INSTALL_IMAP=false
+PHP_FPM_INSTALL_MONGO=false
+PHP_FPM_INSTALL_AMQP=false
+PHP_FPM_INSTALL_CASSANDRA=false
+PHP_FPM_INSTALL_ZMQ=false
+PHP_FPM_INSTALL_GEARMAN=false
+PHP_FPM_INSTALL_MSSQL=false
+PHP_FPM_INSTALL_SSH2=false
+PHP_FPM_INSTALL_SOAP=false
+PHP_FPM_INSTALL_XSL=false
+PHP_FPM_INSTALL_EXIF=false
+PHP_FPM_INSTALL_AEROSPIKE=false
+PHP_FPM_INSTALL_OCI8=false
+PHP_FPM_INSTALL_PGSQL=false
+PHP_FPM_INSTALL_GHOSTSCRIPT=false
+PHP_FPM_INSTALL_LDAP=false
+PHP_FPM_INSTALL_PHALCON=false
+PHP_FPM_INSTALL_SWOOLE=false
+PHP_FPM_INSTALL_TAINT=false
+PHP_FPM_INSTALL_PG_CLIENT=false
+PHP_FPM_INSTALL_POSTGIS=false
+PHP_FPM_INSTALL_PCNTL=false
+PHP_FPM_INSTALL_CALENDAR=false
+PHP_FPM_INSTALL_FAKETIME=false
+PHP_FPM_INSTALL_IONCUBE=false # PHP 8.0 is not supported yet. Reference: https://forum.ioncube.com/viewtopic.php?t=4592
+PHP_FPM_INSTALL_RDKAFKA=false
+PHP_FPM_INSTALL_GETTEXT=false
+PHP_FPM_INSTALL_XMLRPC=false
+PHP_FPM_FAKETIME=-0
+PHP_FPM_INSTALL_APCU=false
+PHP_FPM_INSTALL_CACHETOOL=false
+PHP_FPM_INSTALL_YAML=false
+PHP_FPM_INSTALL_ADDITIONAL_LOCALES=false
+PHP_FPM_INSTALL_MYSQL_CLIENT=false
+PHP_FPM_INSTALL_PING=false
+PHP_FPM_INSTALL_SSHPASS=false
+PHP_FPM_INSTALL_MAILPARSE=false
+PHP_FPM_INSTALL_WKHTMLTOPDF=false
+PHP_FPM_INSTALL_XLSWRITER=false
+PHP_FPM_INSTALL_PHPDECIMAL=false
+PHP_FPM_INSTALL_ZOOKEEPER=false
+PHP_FPM_INSTALL_SSDB=false
+PHP_FPM_INSTALL_TRADER=false
+PHP_FPM_FFMPEG=false
+PHP_FPM_AUDIOWAVEFORM=false
+PHP_FPM_ADDITIONAL_LOCALES="en_US.UTF-8 es_ES.UTF-8 fr_FR.UTF-8"
+PHP_FPM_INSTALL_DOCKER_CLIENT=false
+PHP_FPM_DEFAULT_LOCALE=POSIX
+PHP_FPM_XDEBUG_PORT=9003
+
+PHP_FPM_PUID=1000
+PHP_FPM_PGID=1000
+
+### PHP_FPM_NEW_RELIC #####################################
+
+PHP_FPM_NEW_RELIC=false
+PHP_FPM_NEW_RELIC_KEY=0000
+PHP_FPM_NEW_RELIC_APP_NAME=app_name
+
+### PHP_WORKER ############################################
+
+PHP_WORKER_INSTALL_BZ2=false
+PHP_WORKER_INSTALL_GD=false
+PHP_WORKER_INSTALL_XLSWRITER=false
+PHP_WORKER_INSTALL_IMAGEMAGICK=false
+PHP_WORKER_IMAGEMAGICK_VERSION=latest
+PHP_WORKER_INSTALL_GMP=false
+PHP_WORKER_INSTALL_GNUPG=false
+PHP_WORKER_INSTALL_LDAP=false
+PHP_WORKER_INSTALL_PGSQL=false
+PHP_WORKER_INSTALL_MONGO=false
+PHP_WORKER_INSTALL_BCMATH=false
+PHP_WORKER_INSTALL_MEMCACHED=false
+# PHP_WORKER_INSTALL_OCI8 Does not work in php5.6 version
+PHP_WORKER_INSTALL_OCI8=false
+PHP_WORKER_INSTALL_MSSQL=false
+PHP_WORKER_INSTALL_PHALCON=false
+PHP_WORKER_INSTALL_SOAP=false
+PHP_WORKER_INSTALL_ZIP_ARCHIVE=false
+PHP_WORKER_INSTALL_MYSQL_CLIENT=false
+PHP_WORKER_INSTALL_AMQP=false
+PHP_WORKER_INSTALL_GHOSTSCRIPT=false
+PHP_WORKER_INSTALL_SWOOLE=false
+PHP_WORKER_INSTALL_TAINT=false
+PHP_WORKER_INSTALL_FFMPEG=false
+PHP_WORKER_INSTALL_AUDIOWAVEFORM=false
+PHP_WORKER_INSTALL_CASSANDRA=false
+PHP_WORKER_INSTALL_GEARMAN=false
+PHP_WORKER_INSTALL_REDIS=false
+PHP_WORKER_INSTALL_IMAP=false
+PHP_WORKER_INSTALL_XMLRPC=false
+PHP_WORKER_INSTALL_SSDB=false
+
+PHP_WORKER_PUID=1000
+PHP_WORKER_PGID=1000
+
+### NGINX #################################################
+
+NGINX_HOST_HTTP_PORT=8888
+NGINX_HOST_HTTPS_PORT=443
+NGINX_HOST_LOG_PATH=./logs/nginx/
+NGINX_SITES_PATH=./nginx/sites/
+NGINX_PHP_UPSTREAM_CONTAINER=php-fpm
+NGINX_PHP_UPSTREAM_PORT=9000
+NGINX_SSL_PATH=./nginx/ssl/
+
+### OpenResty #################################################
+
+OPENRESTY_HOST_HTTP_PORT=80
+OPENRESTY_HOST_HTTPS_PORT=443
+OPENRESTY_HOST_LOG_PATH=./logs/openresty/
+OPENRESTY_SITES_PATH=./openresty/sites/
+OPENRESTY_PHP_UPSTREAM_CONTAINER=php-fpm
+OPENRESTY_PHP_UPSTREAM_PORT=9000
+OPENRESTY_SSL_PATH=./openresty/ssl/
+
+### LARAVEL_HORIZON ################################################
+
+LARAVEL_HORIZON_INSTALL_BZ2=false
+LARAVEL_HORIZON_INSTALL_GD=false
+LARAVEL_HORIZON_INSTALL_GMP=false
+LARAVEL_HORIZON_INSTALL_GNUPG=false
+LARAVEL_HORIZON_INSTALL_LDAP=false
+LARAVEL_HORIZON_INSTALL_IMAGEMAGICK=false
+LARAVEL_HORIZON_IMAGEMAGICK_VERSION=latest
+LARAVEL_HORIZON_INSTALL_SOCKETS=false
+LARAVEL_HORIZON_INSTALL_YAML=false
+LARAVEL_HORIZON_INSTALL_ZIP_ARCHIVE=false
+LARAVEL_HORIZON_INSTALL_PHPREDIS=false
+LARAVEL_HORIZON_INSTALL_MONGO=false
+LARAVEL_HORIZON_INSTALL_CASSANDRA=false
+LARAVEL_HORIZON_INSTALL_FFMPEG=false
+LARAVEL_HORIZON_INSTALL_AUDIOWAVEFORM=false
+LARAVEL_HORIZON_PGID=1000
+LARAVEL_HORIZON_PUID=1000
+
+### APACHE ################################################
+
+APACHE_HOST_HTTP_PORT=80
+APACHE_HOST_HTTPS_PORT=443
+APACHE_HOST_LOG_PATH=./logs/apache2
+APACHE_SITES_PATH=./apache2/sites
+APACHE_PHP_UPSTREAM_CONTAINER=php-fpm
+APACHE_PHP_UPSTREAM_PORT=9000
+APACHE_PHP_UPSTREAM_TIMEOUT=60
+APACHE_DOCUMENT_ROOT=/var/www/
+APACHE_SSL_PATH=./apache2/ssl/
+APACHE_INSTALL_HTTP2=false
+
+### MYSQL #################################################
+
+MYSQL_VERSION=latest
+MYSQL_DATABASE=default
+MYSQL_USER=default
+MYSQL_PASSWORD=secret
+MYSQL_PORT=8306
+MYSQL_ROOT_PASSWORD=root
+MYSQL_ENTRYPOINT_INITDB=./mysql/docker-entrypoint-initdb.d
+
+### CLICKHOUSE #################################################
+
+CLICKHOUSE_VERSION=20.9.4.76
+CLICKHOUSE_GOSU_VERSION=1.10
+CLICKHOUSE_CUSTOM_CONFIG=./clickhouse/config.xml
+CLICKHOUSE_USERS_CUSTOM_CONFIG=./clickhouse/users.xml
+CLICKHOUSE_USER=default
+CLICKHOUSE_PASSWORD=HAHA
+CLICKHOUSE_HTTP_PORT=8123
+CLICKHOUSE_CLIENT_PORT=9000
+CLICKHOUSE_NATIVE_PORT=9009
+CLICKHOUSE_ENTRYPOINT_INITDB=./clickhouse/docker-entrypoint-initdb.d
+CLICKHOUSE_HOST_LOG_PATH=./logs/clickhouse
+
+### REDIS #################################################
+
+REDIS_PORT=6379
+
+### REDIS CLUSTER #########################################
+
+REDIS_CLUSTER_PORT_RANGE=7000-7005
+
+### SSDB #################################################
+
+SSDB_PORT=16801
+
+### ZooKeeper #############################################
+
+ZOOKEEPER_PORT=2181
+
+### Percona ###############################################
+
+PERCONA_DATABASE=homestead
+PERCONA_USER=homestead
+PERCONA_PASSWORD=secret
+PERCONA_PORT=3306
+PERCONA_ROOT_PASSWORD=root
+PERCONA_ENTRYPOINT_INITDB=./percona/docker-entrypoint-initdb.d
+
+### MSSQL #################################################
+
+MSSQL_DATABASE=master
+MSSQL_PASSWORD="yourStrong(!)Password"
+MSSQL_PORT=1433
+
+### MARIADB ###############################################
+
+MARIADB_VERSION=latest
+MARIADB_DATABASE=default
+MARIADB_USER=default
+MARIADB_PASSWORD=secret
+MARIADB_PORT=3306
+MARIADB_ROOT_PASSWORD=root
+MARIADB_ENTRYPOINT_INITDB=./mariadb/docker-entrypoint-initdb.d
+
+### POSTGRES ##############################################
+
+POSTGRES_VERSION=alpine
+POSTGRES_DB=default
+POSTGRES_USER=default
+POSTGRES_PASSWORD=secret
+POSTGRES_PORT=5432
+POSTGRES_ENTRYPOINT_INITDB=./postgres/docker-entrypoint-initdb.d
+
+### POSTGRES-POSTGIS ##############################################
+
+POSTGIS_VERSION=latest
+POSTGIS_INSTALL_PGSQL_HTTP_FOR_POSTGIS13=false
+
+### SQS ##############################################
+
+SQS_NODE_HOST_PORT=9324
+SQS_MANAGEMENT_HTTP_HOST_PORT=9325
+
+### RABBITMQ ##############################################
+
+RABBITMQ_NODE_HOST_PORT=5672
+RABBITMQ_MANAGEMENT_HTTP_HOST_PORT=15672
+RABBITMQ_MANAGEMENT_HTTPS_HOST_PORT=15671
+RABBITMQ_WEB_STOMP_HOST_PORT=15674
+
+### MERCURE ##############################################
+
+MERCURE_NODE_HOST_HTTP_PORT=1337
+MERCURE_NODE_HOST_HTTPS_PORT=1338
+MERCURE_PUBLISHER_JWT_KEY=secret
+MERCURE_SUBSCRIBER_JWT_KEY=another_secret
+MERCURE_DEBUG=debug
+MERCURE_SERVER_NAME=:80
+
+### MEILISEARCH ###########################################
+
+MEILISEARCH_HOST_PORT=7700
+MEILISEARCH_KEY=masterkey
+
+### ELASTICSEARCH #########################################
+
+ELASTICSEARCH_HOST_HTTP_PORT=9200
+ELASTICSEARCH_HOST_TRANSPORT_PORT=9300
+
+### KIBANA ################################################
+
+KIBANA_HTTP_PORT=5601
+
+### DEJAVU ################################################
+
+DEJAVU_HTTP_PORT=1358
+
+### MEMCACHED #############################################
+
+MEMCACHED_HOST_PORT=11211
+
+### BEANSTALKD CONSOLE ####################################
+
+BEANSTALKD_CONSOLE_BUILD_PATH=./beanstalkd-console
+BEANSTALKD_CONSOLE_CONTAINER_NAME=beanstalkd-console
+BEANSTALKD_CONSOLE_HOST_PORT=2080
+
+### BEANSTALKD ############################################
+
+BEANSTALKD_HOST_PORT=11300
+
+### SELENIUM ##############################################
+
+SELENIUM_PORT=4444
+
+### MINIO #################################################
+
+MINIO_PORT=9000
+MINIO_CONSOLE_PORT=9001
+MINIO_ROOT_USER=laradock
+MINIO_ROOT_PASSWORD=laradock
+
+### ADMINER ###############################################
+
+ADM_PORT=8081
+ADM_INSTALL_MSSQL=false
+ADM_PLUGINS=
+ADM_DESIGN=pepa-linha
+ADM_DEFAULT_SERVER=mysql
+
+### PHP MY ADMIN ##########################################
+
+# Accepted values: mariadb - mysql
+
+PMA_DB_ENGINE=mysql
+
+# Credentials/Port:
+
+PMA_USER=default
+PMA_PASSWORD=secret
+PMA_ROOT_PASSWORD=secret
+PMA_PORT=8081
+PMA_MAX_EXECUTION_TIME=600
+PMA_MEMORY_LIMIT=256M
+PMA_UPLOAD_LIMIT=2G
+
+### MAILDEV ###############################################
+
+MAILDEV_HTTP_PORT=1080
+MAILDEV_SMTP_PORT=25
+
+### VARNISH ###############################################
+
+VARNISH_CONFIG=/etc/varnish/default.vcl
+VARNISH_PORT=6081
+VARNISH_BACKEND_PORT=81
+VARNISHD_PARAMS="-p default_ttl=3600 -p default_grace=3600"
+
+### Varnish ###############################################
+
+# Proxy 1
+VARNISH_PROXY1_CACHE_SIZE=128m
+VARNISH_PROXY1_BACKEND_HOST=workspace
+VARNISH_PROXY1_SERVER=SERVER1
+
+# Proxy 2
+VARNISH_PROXY2_CACHE_SIZE=128m
+VARNISH_PROXY2_BACKEND_HOST=workspace
+VARNISH_PROXY2_SERVER=SERVER2
+
+### HAPROXY ###############################################
+
+HAPROXY_HOST_HTTP_PORT=8085
+
+### JENKINS ###############################################
+
+JENKINS_HOST_HTTP_PORT=8090
+JENKINS_HOST_SLAVE_AGENT_PORT=50000
+JENKINS_HOME=./jenkins/jenkins_home
+
+### CONFLUENCE ###############################################
+CONFLUENCE_POSTGRES_INIT=true
+CONFLUENCE_VERSION=6.13-ubuntu-18.04-adoptopenjdk8
+CONFLUENCE_POSTGRES_DB=laradock_confluence
+CONFLUENCE_POSTGRES_USER=laradock_confluence
+CONFLUENCE_POSTGRES_PASSWORD=laradock_confluence
+CONFLUENCE_HOST_HTTP_PORT=8090
+
+### GRAFANA ###############################################
+
+GRAFANA_PORT=3000
+
+### GRAYLOG ###############################################
+
+# password must be 16 characters long
+GRAYLOG_PASSWORD=somesupersecretpassword
+# sha256 representation of the password
+GRAYLOG_SHA256_PASSWORD=b1cb6e31e172577918c9e7806c572b5ed8477d3f57aa737bee4b5b1db3696f09
+GRAYLOG_PORT=9000
+GRAYLOG_SYSLOG_TCP_PORT=514
+GRAYLOG_SYSLOG_UDP_PORT=514
+GRAYLOG_GELF_TCP_PORT=12201
+GRAYLOG_GELF_UDP_PORT=12201
+
+### BLACKFIRE #############################################
+
+# Create an account on blackfire.io. Don't enable blackfire and xDebug at the same time. # visit https://blackfire.io/docs/24-days/06-installation#install-probe-debian for more info.
+INSTALL_BLACKFIRE=false
+BLACKFIRE_CLIENT_ID=""
+BLACKFIRE_CLIENT_TOKEN=""
+BLACKFIRE_SERVER_ID=""
+BLACKFIRE_SERVER_TOKEN=""
+
+### AEROSPIKE #############################################
+
+AEROSPIKE_SERVICE_PORT=3000
+AEROSPIKE_FABRIC_PORT=3001
+AEROSPIKE_HEARTBEAT_PORT=3002
+AEROSPIKE_INFO_PORT=3003
+AEROSPIKE_STORAGE_GB=1
+AEROSPIKE_MEM_GB=1
+AEROSPIKE_NAMESPACE=test
+
+### RETHINKDB #############################################
+
+RETHINKDB_PORT=8090
+
+### MONGODB ###############################################
+
+MONGODB_PORT=27017
+MONGO_USERNAME=root
+MONGO_PASSWORD=example
+
+### CADDY #################################################
+
+CADDY_HOST_HTTP_PORT=80
+CADDY_HOST_HTTPS_PORT=443
+CADDY_HOST_LOG_PATH=./logs/caddy
+CADDY_CONFIG_PATH=./caddy/caddy
+
+### LARAVEL ECHO SERVER ###################################
+
+LARAVEL_ECHO_SERVER_PORT=6001
+
+### THUMBOR ############################################################################################################
+
+THUMBOR_PORT=8000
+THUMBOR_LOG_FORMAT="%(asctime)s %(name)s:%(levelname)s %(message)s"
+THUMBOR_LOG_DATE_FORMAT="%Y-%m-%d %H:%M:%S"
+MAX_WIDTH=0
+MAX_HEIGHT=0
+MIN_WIDTH=1
+MIN_HEIGHT=1
+ALLOWED_SOURCES=[]
+QUALITY=80
+WEBP_QUALITY=None
+PNG_COMPRESSION_LEVEL=6
+AUTO_WEBP=False
+MAX_AGE=86400
+MAX_AGE_TEMP_IMAGE=0
+RESPECT_ORIENTATION=False
+IGNORE_SMART_ERRORS=False
+PRESERVE_EXIF_INFO=False
+ALLOW_ANIMATED_GIFS=True
+USE_GIFSICLE_ENGINE=False
+USE_BLACKLIST=False
+LOADER=thumbor.loaders.http_loader
+STORAGE=thumbor.storages.file_storage
+AWS_ACCESS_KEY_ID=
+AWS_SECRET_ACCESS_KEY=
+RESULT_STORAGE=thumbor.result_storages.file_storage
+ENGINE=thumbor.engines.pil
+SECURITY_KEY="MY_SECURE_KEY"
+ALLOW_UNSAFE_URL=True
+ALLOW_OLD_URLS=True
+FILE_LOADER_ROOT_PATH=/data/loader
+HTTP_LOADER_CONNECT_TIMEOUT=5
+HTTP_LOADER_REQUEST_TIMEOUT=20
+HTTP_LOADER_FOLLOW_REDIRECTS=True
+HTTP_LOADER_MAX_REDIRECTS=5
+HTTP_LOADER_FORWARD_USER_AGENT=False
+HTTP_LOADER_DEFAULT_USER_AGENT="Thumbor/5.2.1"
+HTTP_LOADER_PROXY_HOST=None
+HTTP_LOADER_PROXY_PORT=None
+HTTP_LOADER_PROXY_USERNAME=None
+HTTP_LOADER_PROXY_PASSWORD=None
+HTTP_LOADER_CA_CERTS=None
+HTTP_LOADER_VALIDATE_CERTS=True
+HTTP_LOADER_CLIENT_KEY=None
+HTTP_LOADER_CLIENT_CERT=None
+HTTP_LOADER_CURL_ASYNC_HTTP_CLIENT=False
+STORAGE_EXPIRATION_SECONDS=2592000
+STORES_CRYPTO_KEY_FOR_EACH_IMAGE=False
+FILE_STORAGE_ROOT_PATH=/data/storage
+UPLOAD_MAX_SIZE=0
+UPLOAD_ENABLED=False
+UPLOAD_PHOTO_STORAGE=thumbor.storages.file_storage
+UPLOAD_DELETE_ALLOWED=False
+UPLOAD_PUT_ALLOWED=False
+UPLOAD_DEFAULT_FILENAME=image
+MONGO_STORAGE_SERVER_HOST=mongo
+MONGO_STORAGE_SERVER_PORT=27017
+MONGO_STORAGE_SERVER_DB=thumbor
+MONGO_STORAGE_SERVER_COLLECTION=images
+REDIS_STORAGE_SERVER_HOST=redis
+REDIS_STORAGE_SERVER_PORT=6379
+REDIS_STORAGE_SERVER_DB=0
+REDIS_STORAGE_SERVER_PASSWORD=None
+REDIS_RESULT_STORAGE_SERVER_HOST=redis
+REDIS_RESULT_STORAGE_SERVER_PORT=6379
+REDIS_RESULT_STORAGE_SERVER_DB=0
+REDIS_RESULT_STORAGE_SERVER_PASSWORD=None
+MEMCACHE_STORAGE_SERVERS=["localhost:11211",]
+MIXED_STORAGE_FILE_STORAGE=thumbor.storages.no_storage
+MIXED_STORAGE_CRYPTO_STORAGE=thumbor.storages.no_storage
+MIXED_STORAGE_DETECTOR_STORAGE=thumbor.storages.no_storage
+META_CALLBACK_NAME=None
+DETECTORS=[]
+FACE_DETECTOR_CASCADE_FILE=haarcascade_frontalface_alt.xml
+OPTIMIZERS=[]
+JPEGTRAN_PATH=/usr/bin/jpegtran
+PROGRESSIVE_JPEG=True
+FILTERS="[thumbor.filters.brightness, thumbor.filters.contrast, thumbor.filters.rgb, thumbor.filters.round_corner, thumbor.filters.quality, thumbor.filters.noise, thumbor.filters.watermark, thumbor.filters.equalize, thumbor.filters.fill, thumbor.filters.sharpen, thumbor.filters.strip_icc, thumbor.filters.frame, thumbor.filters.grayscale, thumbor.filters.rotate, thumbor.filters.format, thumbor.filters.max_bytes, thumbor.filters.convolution, thumbor.filters.blur, thumbor.filters.extract_focal, thumbor.filters.no_upscale]"
+RESULT_STORAGE_EXPIRATION_SECONDS=0
+RESULT_STORAGE_FILE_STORAGE_ROOT_PATH=/data/result_storage
+RESULT_STORAGE_STORES_UNSAFE=False
+REDIS_QUEUE_SERVER_HOST=redis
+REDIS_QUEUE_SERVER_PORT=6379
+REDIS_QUEUE_SERVER_DB="0"
+REDIS_QUEUE_SERVER_PASSWORD=None
+SQS_QUEUE_KEY_ID=None
+SQS_QUEUE_KEY_SECRET=None
+SQS_QUEUE_REGION=us-east-1
+USE_CUSTOM_ERROR_HANDLING=False
+ERROR_HANDLER_MODULE=thumbor.error_handlers.sentry
+ERROR_FILE_LOGGER=None
+ERROR_FILE_NAME_USE_CONTEXT="False"
+SENTRY_DSN_URL=
+TC_AWS_REGION=eu-west-1
+TC_AWS_ENDPOINT=None
+TC_AWS_STORAGE_BUCKET=
+TC_AWS_STORAGE_ROOT_PATH=
+TC_AWS_LOADER_BUCKET=
+TC_AWS_LOADER_ROOT_PATH=
+TC_AWS_RESULT_STORAGE_BUCKET=
+TC_AWS_RESULT_STORAGE_ROOT_PATH=
+TC_AWS_STORAGE_SSE=False
+TC_AWS_STORAGE_RRS=False
+TC_AWS_ENABLE_HTTP_LOADER=False
+TC_AWS_ALLOWED_BUCKETS=False
+TC_AWS_STORE_METADATA=False
+
+### SOLR ##################################################
+
+SOLR_VERSION=5.5
+SOLR_PORT=8983
+SOLR_DATAIMPORTHANDLER_MYSQL=false
+SOLR_DATAIMPORTHANDLER_MSSQL=false
+
+### GITLAB ###############################################
+GITLAB_POSTGRES_INIT=true
+GITLAB_HOST_HTTP_PORT=8989
+GITLAB_HOST_HTTPS_PORT=9898
+GITLAB_HOST_SSH_PORT=2289
+GITLAB_DOMAIN_NAME=http://localhost
+GITLAB_ROOT_PASSWORD=laradock
+GITLAB_HOST_LOG_PATH=./logs/gitlab
+GITLAB_POSTGRES_HOST=postgres
+GITLAB_POSTGRES_USER=laradock_gitlab
+GITLAB_POSTGRES_PASSWORD=laradock_gitlab
+GITLAB_POSTGRES_DB=laradock_gitlab
+
+### GITLAB-RUNNER ###############################################
+GITLAB_CI_SERVER_URL=http://localhost:8989
+GITLAB_RUNNER_REGISTRATION_TOKEN=""
+GITLAB_REGISTER_NON_INTERACTIVE=true
+
+### JUPYTERHUB ###############################################
+JUPYTERHUB_POSTGRES_INIT=true
+JUPYTERHUB_POSTGRES_HOST=postgres
+JUPYTERHUB_POSTGRES_USER=laradock_jupyterhub
+JUPYTERHUB_POSTGRES_PASSWORD=laradock_jupyterhub
+JUPYTERHUB_POSTGRES_DB=laradock_jupyterhub
+JUPYTERHUB_PORT=9991
+JUPYTERHUB_OAUTH_CALLBACK_URL=http://laradock:9991/hub/oauth_callback
+JUPYTERHUB_OAUTH_CLIENT_ID={GITHUB_CLIENT_ID}
+JUPYTERHUB_OAUTH_CLIENT_SECRET={GITHUB_CLIENT_SECRET}
+JUPYTERHUB_CUSTOM_CONFIG=./jupyterhub/jupyterhub_config.py
+JUPYTERHUB_USER_DATA=/jupyterhub
+JUPYTERHUB_USER_LIST=./jupyterhub/userlist
+JUPYTERHUB_ENABLE_NVIDIA=false
+
+### IPYTHON ##################################################
+LARADOCK_IPYTHON_CONTROLLER_IP=127.0.0.1
+
+### NETDATA ###############################################
+NETDATA_PORT=19999
+
+### REDISWEBUI #########################################
+REDIS_WEBUI_USERNAME=laradock
+REDIS_WEBUI_PASSWORD=laradock
+REDIS_WEBUI_CONNECT_HOST=redis
+REDIS_WEBUI_CONNECT_PORT=6379
+REDIS_WEBUI_PORT=9987
+
+### MONGOWEBUI ###############################################
+MONGO_WEBUI_PORT=3000
+MONGO_WEBUI_ROOT_URL=http://localhost
+MONGO_WEBUI_MONGO_URL=mongodb://mongo:27017/
+MONGO_WEBUI_INSTALL_MONGO=false
+
+### METABASE ###############################################
+METABASE_PORT=3030
+METABASE_DB_FILE=metabase.db
+METABASE_JAVA_TIMEZONE=US/Pacific
+
+### IDE ###############################################
+IDE_THEIA_PORT=987
+IDE_WEBIDE_PORT=984
+IDE_CODIAD_PORT=985
+IDE_ICECODER_PORT=986
+
+### DOCKERREGISTRY ###############################################
+DOCKER_REGISTRY_PORT=5000
+
+### DOCKERWEBUI ###############################################
+DOCKER_WEBUI_REGISTRY_HOST=docker-registry
+DOCKER_WEBUI_REGISTRY_PORT=5000
+# if have use https proxy please set to 1
+DOCKER_REGISTRY_USE_SSL=0
+DOCKER_REGISTRY_BROWSE_ONLY=false
+DOCKER_WEBUI_PORT=8754
+
+### MAILU ###############################################
+MAILU_VERSION=latest
+MAILU_RECAPTCHA_PUBLIC_KEY=""
+MAILU_RECAPTCHA_PRIVATE_KEY=""
+# Main mail domain
+MAILU_HTTP_PORT=6080
+MAILU_HTTPS_PORT=60443
+MAILU_DOMAIN=example.com
+MAILU_INIT_ADMIN_USERNAME=laradock
+MAILU_INIT_ADMIN_PASSWORD=laradock
+# Hostnames for this server, separated with comas
+MAILU_HOSTNAMES=mail.example.com,alternative.example.com,yetanother.example.com
+# Postmaster local part (will append the main mail domain)
+MAILU_POSTMASTER=admin
+# Set to a randomly generated 16 bytes string
+MAILU_SECRET_KEY=ChangeMeChangeMe
+# Choose how secure connections will behave (value: letsencrypt, cert, notls, mail)
+MAILU_TLS_FLAVOR=cert
+# Authentication rate limit (per source IP address)
+MAILU_AUTH_RATELIMIT="10/minute;1000/hour"
+# Opt-out of statistics, replace with "True" to opt out
+MAILU_DISABLE_STATISTICS=False
+# Message size limit in bytes
+# Default: accept messages up to 50MB
+MAILU_MESSAGE_SIZE_LIMIT=50000000
+# Will relay all outgoing mails if configured
+MAILU_RELAYHOST=
+# Networks granted relay permissions, make sure that you include your Docker
+# internal network (default to 172.17.0.0/16)
+MAILU_RELAYNETS=172.16.0.0/12
+# Fetchmail delay
+MAILU_FETCHMAIL_DELAY=600
+# Recipient delimiter, character used to delimiter localpart from custom address part
+# e.g. localpart+custom@domain;tld
+MAILU_RECIPIENT_DELIMITER=+
+# DMARC rua and ruf email
+MAILU_DMARC_RUA=admin
+MAILU_DMARC_RUF=admin
+# Welcome email, enable and set a topic and body if you wish to send welcome
+# emails to all users.
+MAILU_WELCOME=True
+MAILU_WELCOME_SUBJECT="Welcome to your new email account"
+MAILU_WELCOME_BODY="Welcome to your new email account, if you can read this, then it is configured properly!"
+# Path to the admin interface if enabled
+MAILU_WEB_ADMIN=/admin
+# Path to the webmail if enabled
+MAILU_WEB_WEBMAIL=/webmail
+# Website name
+MAILU_SITENAME="Example Mail"
+# Linked Website URL
+MAILU_WEBSITE=http://mail.example.com
+# Default password scheme used for newly created accounts and changed passwords
+# (value: SHA512-CRYPT, SHA256-CRYPT, MD5-CRYPT, CRYPT)
+MAILU_PASSWORD_SCHEME=SHA512-CRYPT
+# Expose the admin interface (value: true, false)
+MAILU_ADMIN=true
+# Choose which webmail to run if any (values: roundcube, rainloop, none)
+MAILU_WEBMAIL=rainloop
+# Dav server implementation (value: radicale, none)
+MAILU_WEBDAV=radicale
+
+
+### TRAEFIK #################################################
+
+TRAEFIK_HOST_HTTP_PORT=80
+TRAEFIK_HOST_HTTPS_PORT=443
+TRAEFIK_DASHBOARD_PORT=8888
+# basic authentication for traefik dashboard username: admin password:admin
+TRAEFIK_DASHBOARD_USER=admin:$2y$10$lXaL3lj6raFic6rFqr2.lOBoCudAIhB6zyoqObNg290UFppiUzTTi
+ACME_DOMAIN=example.org
+ACME_EMAIL=email@example.org
+
+
+### MOSQUITTO #################################################
+
+MOSQUITTO_PORT=9001
+
+### COUCHDB ###################################################
+
+COUCHDB_PORT=5984
+
+### Manticore Search ##########################################
+
+MANTICORE_CONFIG_PATH=./manticore/config
+MANTICORE_API_PORT=9312
+MANTICORE_SPHINXQL_PORT=9306
+MANTICORE_HTTP_PORT=9308
+
+### pgadmin ##################################################
+# use this address http://ip6-localhost:5050
+PGADMIN_PORT=5050
+PGADMIN_DEFAULT_EMAIL=pgadmin4@pgadmin.org
+PGADMIN_DEFAULT_PASSWORD=admin
+
+### SWAGGER EDITOR ###########################################
+
+SWAGGER_EDITOR_PORT=5151
+
+### SWAGGER UI ###############################################
+
+SWAGGER_API_URL=http://generator.swagger.io/api/swagger.json
+SWAGGER_UI_PORT=5555
+
+### SONARQUBE ################################################
+## docker-compose up -d sonarqube
+## (If you encounter a database error)
+## docker-compose exec --user=root postgres
+## source docker-entrypoint-initdb.d/init_sonarqube_db.sh
+## (If you encounter logs error)
+## docker-compose run --user=root --rm sonarqube chown sonarqube:sonarqube /opt/sonarqube/logs
+
+SONARQUBE_HOSTNAME=sonar.example.com
+SONARQUBE_PORT=9000
+SONARQUBE_POSTGRES_INIT=true
+SONARQUBE_POSTGRES_HOST=postgres
+SONARQUBE_POSTGRES_DB=sonar
+SONARQUBE_POSTGRES_USER=sonar
+SONARQUBE_POSTGRES_PASSWORD=sonarPass
+
+### TOMCAT ################################################
+TOMCAT_VERSION=8.5.43
+TOMCAT_HOST_HTTP_PORT=8080
+
+### CASSANDRA ################################################
+
+# Cassandra Version, supported tags can be found at https://hub.docker.com/r/bitnami/cassandra/
+CASSANDRA_VERSION=latest
+# Inter-node cluster communication port. Default: 7000
+CASSANDRA_TRANSPORT_PORT_NUMBER=7000
+# JMX connections port. Default: 7199
+CASSANDRA_JMX_PORT_NUMBER=7199
+# Client port. Default: 9042.
+CASSANDRA_CQL_PORT_NUMBER=9042
+# Cassandra user name. Defaults: cassandra
+CASSANDRA_USER=cassandra
+# Password seeder will change the Cassandra default credentials at initialization. In clusters, only one node should be marked as password seeder. Default: no
+CASSANDRA_PASSWORD_SEEDER=no
+# Cassandra user password. Default: cassandra
+CASSANDRA_PASSWORD=cassandra
+# Number of tokens for the node. Default: 256.
+CASSANDRA_NUM_TOKENS=256
+# Hostname used to configure Cassandra. It can be either an IP or a domain. If left empty, it will be resolved to the machine IP.
+CASSANDRA_HOST=
+# Cluster name to configure Cassandra.. Defaults: My Cluster
+CASSANDRA_CLUSTER_NAME="My Cluster"
+# : Hosts that will act as Cassandra seeds. No defaults.
+CASSANDRA_SEEDS=
+ # Snitch name (which determines which data centers and racks nodes belong to). Default SimpleSnitch
+CASSANDRA_ENDPOINT_SNITCH=SimpleSnitch
+ # Enable the thrift RPC endpoint. Default :true
+CASSANDRA_ENABLE_RPC=true
+# Datacenter name for the cluster. Ignored in SimpleSnitch endpoint snitch. Default: dc1.
+CASSANDRA_DATACENTER=dc1
+# Rack name for the cluster. Ignored in SimpleSnitch endpoint snitch. Default: rack1.
+CASSANDRA_RACK=rack1
+
+### GEARMAN ##################################################
+
+# Gearman version to use. See available tags at https://hub.docker.com/r/artefactual/gearmand
+GEARMAN_VERSION=latest
+# Port to use (Default: 4730)
+GEARMAN_PORT=4730
+# Logging Level (Default: INFO)
+GEARMAN_VERBOSE=INFO
+# Persistent queue type to use (Default: builtin)
+GEARMAN_QUEUE_TYPE=builtin
+# Number of I/O threads to use (Default: 4)
+GEARMAN_THREADS=4
+# Number of backlog connections for listen (Default: 32)
+GEARMAN_BACKLOG=32
+# Number of file descriptors to allow for the process (Default is max allowed for user)
+GEARMAN_FILE_DESCRIPTORS=
+# Number of attempts to run the job before the job server removes it. (Default: no limit = 0)
+GEARMAN_JOB_RETRIES=0
+# Assign work in round-robin order per worker connection (Default: 0)
+GEARMAN_ROUND_ROBIN=0
+# Number of workers to wakeup for each job received (Default: 0)
+GEARMAN_WORKER_WAKEUP=0
+# Enable keepalive on sockets (Default: 0)
+GEARMAN_KEEPALIVE=0
+# The duration between two keepalive transmissions in idle condition (Default: 30)
+GEARMAN_KEEPALIVE_IDLE=30
+# The duration between two successive keepalive retransmissions, if acknowledgement to the previous keepalive transmission is not received (Default: 10)
+GEARMAN_KEEPALIVE_INTERVAL=10
+# The number of retransmissions to be carried out before declaring that remote end is not available (Default: 5)
+GEARMAN_KEEPALIVE_COUNT=5
+# Mysql server host (Default: localhost)
+GEARMAN_MYSQL_HOST=localhost
+# Mysql server port (Default: 3306)
+GEARMAN_MYSQL_PORT=3306
+# Mysql server user (Default: root)
+GEARMAN_MYSQL_USER=root
+# Mysql password
+GEARMAN_MYSQL_PASSWORD=
+# Path to file with mysql password(Docker secrets)
+GEARMAN_MYSQL_PASSWORD_FILE=
+# Database to use by Gearman (Default: Gearmand)
+GEARMAN_MYSQL_DB=Gearmand
+# Table to use by Gearman (Default: gearman_queue)
+GEARMAN_MYSQL_TABLE=gearman_queue
+
+### ELK Stack ##################################################
+ELK_VERSION=7.9.1
+
+### Tarantool ##################################################
+TARANTOOL_PORT=3301
+TARANTOOL_ADMIN_PORT=8002
+
+### NATS ##################################################
+NATS_CLIENT_PORT=4222
+NATS_MONITORING_PORT=6222
+NATS_ROUTE_PORT=8222
diff --git a/laradock/.gitattributes b/laradock/.gitattributes
new file mode 100644
index 000000000..dfdb8b771
--- /dev/null
+++ b/laradock/.gitattributes
@@ -0,0 +1 @@
+*.sh text eol=lf
diff --git a/laradock/.github/FUNDING.yml b/laradock/.github/FUNDING.yml
new file mode 100644
index 000000000..cc034fc93
--- /dev/null
+++ b/laradock/.github/FUNDING.yml
@@ -0,0 +1,6 @@
+# DO NOT CHANGE THIS FILE PLEASE.
+
+github: Mahmoudz
+open_collective: laradock
+custom: ['paypal.me/mzmmzz']
+patreon: zalt
diff --git a/laradock/.github/ISSUE_TEMPLATE/bug_report.md b/laradock/.github/ISSUE_TEMPLATE/bug_report.md
new file mode 100644
index 000000000..14edccab9
--- /dev/null
+++ b/laradock/.github/ISSUE_TEMPLATE/bug_report.md
@@ -0,0 +1,50 @@
+---
+name: "Bug report"
+about: "Report a general issue, encountered while using Laradock."
+labels: "Type: Bug"
+---
+
+### Description:
+
+
+### Expected Behavior:
+
+
+### Context information:
+
+**Output of `git rev-parse HEAD`**
+
+```
+{paste here}
+```
+
+**Output of `docker version`**
+
+```
+{paste here}
+```
+
+**Output of `docker-compose version`**
+
+```
+{paste here}
+```
+
+**System info: Mac, Windows or Linux. Include which disto/version**
+
+```
+{paste here}
+```
+
+### Steps to reproduce the issue:
+
+
+1.
+2.
+3.
+
+### Stacktrace & Additional info:
+
+```
+{paste here}
+```
diff --git a/laradock/.github/ISSUE_TEMPLATE/config.yml b/laradock/.github/ISSUE_TEMPLATE/config.yml
new file mode 100644
index 000000000..18ff9f8ba
--- /dev/null
+++ b/laradock/.github/ISSUE_TEMPLATE/config.yml
@@ -0,0 +1,5 @@
+blank_issues_enabled: false
+contact_links:
+ - name: Support question
+ url: https://gitter.im/LaraDock/laradock
+ about: 'This repository is only for reporting bugs. If you need help, get in touch with us via Gitter.'
diff --git a/laradock/.github/ISSUE_TEMPLATE/feature_request.md b/laradock/.github/ISSUE_TEMPLATE/feature_request.md
new file mode 100644
index 000000000..15ad6ff8f
--- /dev/null
+++ b/laradock/.github/ISSUE_TEMPLATE/feature_request.md
@@ -0,0 +1,17 @@
+---
+name: "Feature request"
+about: "Suggest an idea for this project."
+labels: "Type: Feature Request"
+---
+
+**Is your feature request related to a problem? Please describe.**
+
+
+**Describe the solution you'd like**
+
+
+**Describe alternatives you've considered**
+
+
+**Additional context**
+
diff --git a/laradock/.github/PULL_REQUEST_TEMPLATE.md b/laradock/.github/PULL_REQUEST_TEMPLATE.md
new file mode 100644
index 000000000..85ca95d7e
--- /dev/null
+++ b/laradock/.github/PULL_REQUEST_TEMPLATE.md
@@ -0,0 +1,18 @@
+## Description
+
+
+
+## Motivation and Context
+
+
+## Types of Changes
+
+- [] Bug fix (non-breaking change which fixes an issue).
+- [] New feature (non-breaking change which adds functionality).
+- [] Breaking change (fix or feature that would cause existing functionality to not work as expected).
+
+## Definition of Done Checklist:
+
+- [] I've read the [Contribution Guide](http://laradock.io/contributing).
+- [] I've updated the **documentation**. (refer to [this](http://laradock.io/contributing/#update-the-documentation-site) for how to do so).
+- [] I enjoyed my time contributing and making developer's life easier :)
diff --git a/laradock/.github/SUPPORT.md b/laradock/.github/SUPPORT.md
new file mode 100644
index 000000000..323f966ff
--- /dev/null
+++ b/laradock/.github/SUPPORT.md
@@ -0,0 +1,3 @@
+# Support Questions
+
+For help, please visit our official chatting room on [Gitter](https://gitter.im/Laradock/laradock).
diff --git a/laradock/.github/home-page-images/custom-sponsors/AU.png b/laradock/.github/home-page-images/custom-sponsors/AU.png
new file mode 100644
index 000000000..b95697de0
Binary files /dev/null and b/laradock/.github/home-page-images/custom-sponsors/AU.png differ
diff --git a/laradock/.github/home-page-images/custom-sponsors/CA.png b/laradock/.github/home-page-images/custom-sponsors/CA.png
new file mode 100644
index 000000000..d0506fdee
Binary files /dev/null and b/laradock/.github/home-page-images/custom-sponsors/CA.png differ
diff --git a/laradock/.github/home-page-images/custom-sponsors/PLD.png b/laradock/.github/home-page-images/custom-sponsors/PLD.png
new file mode 100644
index 000000000..f05dda2e0
Binary files /dev/null and b/laradock/.github/home-page-images/custom-sponsors/PLD.png differ
diff --git a/laradock/.github/home-page-images/custom-sponsors/VeePN.png b/laradock/.github/home-page-images/custom-sponsors/VeePN.png
new file mode 100644
index 000000000..efad065de
Binary files /dev/null and b/laradock/.github/home-page-images/custom-sponsors/VeePN.png differ
diff --git a/laradock/.github/home-page-images/custom-sponsors/apiato.png b/laradock/.github/home-page-images/custom-sponsors/apiato.png
new file mode 100644
index 000000000..bdef27eaa
Binary files /dev/null and b/laradock/.github/home-page-images/custom-sponsors/apiato.png differ
diff --git a/laradock/.github/home-page-images/custom-sponsors/bestonlinecasino.jpg b/laradock/.github/home-page-images/custom-sponsors/bestonlinecasino.jpg
new file mode 100644
index 000000000..85e15a53f
Binary files /dev/null and b/laradock/.github/home-page-images/custom-sponsors/bestonlinecasino.jpg differ
diff --git a/laradock/.github/home-page-images/custom-sponsors/casinopilotti.png b/laradock/.github/home-page-images/custom-sponsors/casinopilotti.png
new file mode 100644
index 000000000..09f3bd4e1
Binary files /dev/null and b/laradock/.github/home-page-images/custom-sponsors/casinopilotti.png differ
diff --git a/laradock/.github/home-page-images/documentation-button.png b/laradock/.github/home-page-images/documentation-button.png
new file mode 100644
index 000000000..4ab171619
Binary files /dev/null and b/laradock/.github/home-page-images/documentation-button.png differ
diff --git a/laradock/.github/home-page-images/join-us.png b/laradock/.github/home-page-images/join-us.png
new file mode 100644
index 000000000..c97f75f9f
Binary files /dev/null and b/laradock/.github/home-page-images/join-us.png differ
diff --git a/laradock/.github/home-page-images/laradock-logo.jpg b/laradock/.github/home-page-images/laradock-logo.jpg
new file mode 100644
index 000000000..4d6af5587
Binary files /dev/null and b/laradock/.github/home-page-images/laradock-logo.jpg differ
diff --git a/laradock/.github/stale.yml b/laradock/.github/stale.yml
new file mode 100644
index 000000000..dfadd7905
--- /dev/null
+++ b/laradock/.github/stale.yml
@@ -0,0 +1,21 @@
+# Configuration for Github probot-stale - https://github.com/probot/stale
+
+# Number of days of inactivity before an issue becomes stale
+daysUntilStale: 90
+# Number of days of inactivity before a stale issue is closed
+daysUntilClose: 21
+# Issues with these labels will never be considered stale
+exemptLabels:
+ - 'Type: Feature Request'
+# Label to use when marking an issue as stale
+staleLabel: Stale
+# Comment to post when marking an issue as stale. Set to `false` to disable
+markComment: >
+ Hi 👋 this issue has been automatically marked as `stale` 📌 because it has not had recent activity 😴.
+ It will be closed if no further activity occurs. Thank you for your contributions ❤️.
+# Comment to post when closing a stale issue. Set to `false` to disable
+closeComment: >
+ Hi again 👋 we would like to inform you that this issue has been automatically `closed` 🔒 because it had not recent activity during the `stale` period.
+ We really really appreciate your contributions, and looking forward for more in the future 🎈.
+# Limit to only `issues` or `pulls`
+only: issues
diff --git a/laradock/.github/workflows/build-deploy-docs.yml b/laradock/.github/workflows/build-deploy-docs.yml
new file mode 100644
index 000000000..03bad63f6
--- /dev/null
+++ b/laradock/.github/workflows/build-deploy-docs.yml
@@ -0,0 +1,39 @@
+name: Build Deploy Docs
+
+on:
+ push:
+ branches:
+ - master
+ paths:
+ - '.github/workflows/build-deploy-docs.yml'
+ - 'DOCUMENTATION/**'
+
+jobs:
+ build-deploy-docs:
+ if: github.repository == 'laradock/laradock'
+ runs-on: ubuntu-20.04
+ concurrency:
+ group: ${{ github.workflow }}-${{ github.ref }}
+ defaults:
+ run:
+ working-directory: ./DOCUMENTATION
+ steps:
+ - name: Checkout Source Code
+ uses: actions/checkout@v2
+
+ - name: Setup Hugo
+ uses: peaceiris/actions-hugo@v2
+ with:
+ hugo-version: '0.55.0'
+ env:
+ ACTIONS_ALLOW_UNSECURE_COMMANDS: true
+
+ - name: Build Hugo Site
+ run: hugo --minify
+
+ - name: Deploy Hugo Site to Github Pages
+ uses: peaceiris/actions-gh-pages@v3
+ with:
+ github_token: ${{ secrets.GITHUB_TOKEN }}
+ publish_branch: gh-pages
+ publish_dir: ./docs
diff --git a/laradock/.github/workflows/main-ci.yml b/laradock/.github/workflows/main-ci.yml
new file mode 100644
index 000000000..7d59bf14b
--- /dev/null
+++ b/laradock/.github/workflows/main-ci.yml
@@ -0,0 +1,68 @@
+name: CI
+
+on:
+ push:
+ branches: '**'
+ tags: '**'
+ paths-ignore:
+ - '.github/workflows/build-deploy-docs.yml'
+ - 'DOCUMENTATION/**'
+ pull_request:
+ schedule:
+ - cron: '0 0 * * 0'
+
+jobs:
+ build-php:
+ # Don't trigger on schedule event when in a fork
+ if: github.event_name != 'schedule' || (github.event_name == 'schedule' && github.repository == 'laradock/laradock')
+ runs-on: ubuntu-latest
+ strategy:
+ fail-fast: false
+ matrix:
+ php_version: [ "5.6", "7.0", "7.1", "7.2", "7.3", "7.4", "8.0", "8.1" ]
+ service: [ php-fpm, php-worker, workspace ]
+ steps:
+ - uses: actions/checkout@v2
+ - name: Build the Docker image
+ env:
+ PHP_VERSION: ${{ matrix.php_version }}
+ run: |
+ set -eux
+ cp .env.example .env
+ sed -i -- 's/=false/=true/g' .env
+ sed -i -- 's/CHANGE_SOURCE=true/CHANGE_SOURCE=false/g' .env
+ sed -i -- 's/PHPDBG=true/PHPDBG=false/g' .env
+ sed -i -- 's/CASSANDRA=true/CASSANDRA=false/g' .env
+ sed -i -- 's/GEARMAN=true/GEARMAN=false/g' .env
+ sed -i -- 's/AEROSPIKE=true/AEROSPIKE=false/g' .env
+ sed -i -- 's/PHALCON=true/PHALCON=false/g' .env
+ sed -i -- 's/RDKAFKA=true/RDKAFKA=false/g' .env
+ sed -i -- 's/MAILPARSE=true/MAILPARSE=false/g' .env
+ sed -i -- 's/OCI8=true/OCI8=false/g' .env
+ sed -i -- 's/V8JS=true/V8JS=false/g' .env
+ sed -i -- 's/AUDIOWAVEFORM=true/AUDIOWAVEFORM=false/g' .env
+ sed -i -- 's/SSDB=true/SSDB=false/g' .env
+ sed -i -- 's/ENCHANT=true/ENCHANT=false/g' .env
+ sed -i -- 's/PG_CLIENT=true/PG_CLIENT=false/g' .env
+ sed -i -- 's/MSSQL=true/MSSQL=false/g' .env
+ docker-compose build ${{ matrix.service }}
+ docker-compose up -d --no-deps -- ${{ matrix.service }}
+ docker-compose exec -T -- ${{ matrix.service }} php -m
+ docker-compose down
+
+ build-other:
+ # Don't trigger on schedule event when in a fork
+ if: github.event_name != 'schedule' || (github.event_name == 'schedule' && github.repository == 'laradock/laradock')
+ runs-on: ubuntu-latest
+ strategy:
+ fail-fast: false
+ matrix:
+ service: [ 'nginx', 'redis', 'mysql', 'mariadb', 'percona', 'minio', 'mongo' ]
+ steps:
+ - uses: actions/checkout@v2
+ - name: Build the Docker image
+ run: |
+ cp .env.example .env
+ sed -i -- 's/=false/=true/g' .env
+ sed -i -- 's/CHANGE_SOURCE=true/CHANGE_SOURCE=false/g' .env
+ docker-compose build ${{ matrix.service }}
diff --git a/laradock/.gitignore b/laradock/.gitignore
new file mode 100644
index 000000000..d2c5d26e3
--- /dev/null
+++ b/laradock/.gitignore
@@ -0,0 +1,27 @@
+.idea
+/logs
+/data
+.env
+/.project
+.docker-sync
+/jenkins/jenkins_home
+
+/logstash/pipeline/*.conf
+/logstash/config/pipelines.yml
+
+/nginx/ssl/*.crt
+/nginx/ssl/*.key
+/nginx/ssl/*.csr
+
+/apache2/ssl/*.crt
+/apache2/ssl/*.key
+/apache2/ssl/*.csr
+/apache2/ssl/*.org
+
+/.devcontainer/*
+!/.devcontainer/devcontainer.example.json
+!/.devcontainer/docker-compose.extend-example.yml
+
+docker-compose.custom.yml
+
+.DS_Store
diff --git a/laradock/.gitpod.yml b/laradock/.gitpod.yml
new file mode 100644
index 000000000..a612ef0c3
--- /dev/null
+++ b/laradock/.gitpod.yml
@@ -0,0 +1,2 @@
+image: gitpod/workspace-full
+
diff --git a/laradock/.travis.yml b/laradock/.travis.yml
new file mode 100644
index 000000000..b34ef2ae9
--- /dev/null
+++ b/laradock/.travis.yml
@@ -0,0 +1,58 @@
+language: bash
+sudo: required
+services:
+ - docker
+
+env:
+ matrix:
+ - HUGO_VERSION=0.20.2
+
+ - PHP_VERSION=hhvm BUILD_SERVICE=hhvm
+
+ # - PHP_VERSION=5.6 BUILD_SERVICE=php-worker
+ - PHP_VERSION=7.0 BUILD_SERVICE=php-worker
+ - PHP_VERSION=7.1 BUILD_SERVICE=php-worker
+ - PHP_VERSION=7.2 BUILD_SERVICE=php-worker
+ - PHP_VERSION=7.3 BUILD_SERVICE=php-worker
+ - PHP_VERSION=7.4 BUILD_SERVICE=php-worker
+ - PHP_VERSION=8.0 BUILD_SERVICE=php-worker
+ - PHP_VERSION=8.1 BUILD_SERVICE=php-worker
+
+ - PHP_VERSION=7.0 BUILD_SERVICE=laravel-horizon
+ - PHP_VERSION=7.1 BUILD_SERVICE=laravel-horizon
+ - PHP_VERSION=7.2 BUILD_SERVICE=laravel-horizon
+ - PHP_VERSION=7.3 BUILD_SERVICE=laravel-horizon
+ - PHP_VERSION=7.4 BUILD_SERVICE=laravel-horizon
+ - PHP_VERSION=8.0 BUILD_SERVICE=laravel-horizon
+ - PHP_VERSION=8.1 BUILD_SERVICE=laravel-horizon
+
+ - PHP_VERSION=NA BUILD_SERVICE=solr
+ - PHP_VERSION=NA BUILD_SERVICE="mssql rethinkdb aerospike"
+ - PHP_VERSION=NA BUILD_SERVICE="blackfire minio percona nginx caddy apache2 mysql mariadb postgres postgres-postgis neo4j mongo redis cassandra"
+ - PHP_VERSION=NA BUILD_SERVICE="adminer phpmyadmin pgadmin"
+ - PHP_VERSION=NA BUILD_SERVICE="memcached beanstalkd beanstalkd-console rabbitmq elasticsearch certbot mailhog maildev selenium jenkins proxy proxy2 haproxy gearman"
+ - PHP_VERSION=NA BUILD_SERVICE="kibana grafana laravel-echo-server"
+ - PHP_VERSION=NA BUILD_SERVICE="ipython-controller manticore"
+ # - PHP_VERSION=NA BUILD_SERVICE="aws"
+
+# Installing a newer Docker version
+before_install:
+ - curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
+ - sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
+ - sudo apt-get update
+ - sudo apt-get -y install docker-ce
+ - docker version
+
+script: ./travis-build.sh
+
+deploy:
+ provider: pages
+ skip_cleanup: true
+ local_dir: docs
+ github_token: $GITHUB_TOKEN
+ on:
+ branch: master
+ condition: -n "${HUGO_VERSION}"
+
+notifications:
+ email: false
diff --git a/laradock/.vscode/extensions.json b/laradock/.vscode/extensions.json
new file mode 100644
index 000000000..549ed8615
--- /dev/null
+++ b/laradock/.vscode/extensions.json
@@ -0,0 +1,6 @@
+{
+ "recommendations": [
+ "editorconfig.editorconfig",
+ "mikestead.dotenv"
+ ]
+}
diff --git a/laradock/.vscode/settings.json b/laradock/.vscode/settings.json
new file mode 100644
index 000000000..3f259ad13
--- /dev/null
+++ b/laradock/.vscode/settings.json
@@ -0,0 +1,6 @@
+{
+ "files.associations": {
+ ".env.example": "dotenv",
+ "Dockerfile-*": "dockerfile"
+ }
+}
diff --git a/laradock/CODE_OF_CONDUCT.md b/laradock/CODE_OF_CONDUCT.md
new file mode 100644
index 000000000..4d6e3062a
--- /dev/null
+++ b/laradock/CODE_OF_CONDUCT.md
@@ -0,0 +1,3 @@
+# Laradock Code of Conduct
+
+We follow the [Contributor Covenant](https://www.contributor-covenant.org/version/1/4/code-of-conduct) Code of Conduct.
diff --git a/laradock/CONTRIBUTING.md b/laradock/CONTRIBUTING.md
new file mode 100644
index 000000000..74868e19f
--- /dev/null
+++ b/laradock/CONTRIBUTING.md
@@ -0,0 +1,3 @@
+# Thank you for your consideration
+
+Checkout out our [contribution guide](http://laradock.io/contributing).
diff --git a/laradock/DOCUMENTATION/config.toml b/laradock/DOCUMENTATION/config.toml
new file mode 100644
index 000000000..d6c3a732d
--- /dev/null
+++ b/laradock/DOCUMENTATION/config.toml
@@ -0,0 +1,87 @@
+baseurl = "https://laradock.io/"
+languageCode = "en-us"
+publishDir = "../docs"
+title = "Laradock"
+theme = "hugo-material-docs"
+metadataformat = "yaml"
+canonifyurls = true
+uglyurls = true
+# Enable Google Analytics by entering your tracking id
+googleAnalytics = "UA-37514928-9"
+
+[params]
+ # General information
+ author = "Mahmoud Zalt"
+ description = "Full PHP development environment for Docker."
+ copyright = ""
+
+ # Repository
+ provider = ""
+ repo_url = "https://github.com/laradock/laradock"
+
+ version = ""
+ logo = "images/favicons/ms-icon-310x310.png"
+ favicon = "images/favicons/favicon.ico"
+
+ permalink = "#"
+
+ # Custom assets
+ custom_css = ["custom-style.css"]
+ custom_js = []
+
+ # Syntax highlighting theme
+ highlight_css = ""
+
+ [params.palette]
+ primary = "deep-purple"
+ accent = "purple"
+
+ [params.font]
+ text = "Doctarine"
+ code = "Source Code Pro"
+
+[social]
+ twitter = ""
+ github = "laradock/laradock"
+ email = "support@laradock.io"
+
+# ------- MENU START -----------------------------------------
+
+[[menu.main]]
+ name = "Introduction"
+ url = "introduction/"
+ weight = 1
+
+[[menu.main]]
+ name = "Getting Started"
+ url = "getting-started/"
+ weight = 2
+
+[[menu.main]]
+ name = "Documentation"
+ url = "documentation/"
+ weight = 3
+
+[[menu.main]]
+ name = "Help & Questions"
+ url = "help/"
+ weight = 4
+
+[[menu.main]]
+ name = "Related Projects"
+ url = "related-projects/"
+ weight = 5
+
+[[menu.main]]
+ name = "Contributions"
+ url = "contributing/"
+ weight = 6
+
+# ------- MENU END -----------------------------------------
+
+[blackfriday]
+ smartypants = true
+ fractions = true
+ smartDashes = true
+ plainIDAnchors = true
+
diff --git a/laradock/DOCUMENTATION/content/contributing/index.md b/laradock/DOCUMENTATION/content/contributing/index.md
new file mode 100644
index 000000000..b2d05d614
--- /dev/null
+++ b/laradock/DOCUMENTATION/content/contributing/index.md
@@ -0,0 +1,217 @@
+---
+title: Contributions
+type: index
+weight: 6
+---
+
+[](https://gitpod.io/#https://github.com/laradock/laradock)
+
+
+## Have a Question
+
+If you have questions about how to use Laradock, please direct your questions to the discussion on [Gitter](https://gitter.im/Laradock/laradock). If you believe your question could help others, then consider opening an [Issue](https://github.com/laradock/laradock/issues) (it will be labeled as `Question`) And you can still seek help on Gitter for it.
+
+
+
+## Found an Issue
+
+If you have an issue or you found a typo in the documentation, you can help us by
+opening an [Issue](https://github.com/laradock/laradock/issues).
+
+**Steps to do before opening an Issue:**
+
+1. Before you submit your issue search the archive, maybe your question was already answered couple hours ago (search in the closed Issues as well).
+
+2. Decide if the Issue belongs to this project or to [Docker](https://github.com/docker) itself! or even the tool you are using such as Nginx or MongoDB...
+
+If your issue appears to be a bug, and hasn't been reported, then open a new issue.
+
+*This helps us maximize the effort we can spend fixing issues and adding new
+features, by not reporting duplicate issues.*
+
+
+
+## Want a Feature
+You can request a new feature by submitting an [Issue](https://github.com/laradock/laradock/issues) (it will be labeled as `Feature Suggestion`). If you would like to implement a new feature then consider submitting a Pull Request yourself.
+
+
+
+
+## Update the Documentation (Site)
+
+Laradock uses [Hugo](https://gohugo.io/) as website generator tool, with the [Material Docs theme](http://themes.gohugo.io/theme/material-docs/). You might need to check their docs quickly.
+
+Go the `DOCUMENTATION/content` and search for the markdown file you want to edit
+
+Note: Every folder represents a section in the sidebar "Menu". And every page and sidebar has a `weight` number to show it's position in the site.
+
+To update the sidebar or add a new section to it, you can edit this `DOCUMENTATION/config.toml` toml file.
+
+> The site will be auto-generated in the `docs/` folder by [Travis CI](https://travis-ci.org/laradock/laradock/).
+
+
+
+### Host the documentation locally
+
+**Option 1: Use Hugo Docker Image:**
+
+1. Update the `DOCUMENTATION/content`.
+2. Go to `DOCUMENTATION/`.
+3. Run `docker run --rm -it -v $PWD:/src -p 1313:1313 -u hugo jguyomard/hugo-builder hugo server -w --bind=0.0.0.0`
+4. Visit [http://localhost:1313/](http://localhost:1313/)
+
+**Option 2: Install Hugo Locally:**
+
+1. Install [Hugo](https://gohugo.io/) on your machine.
+2. Update the `DOCUMENTATION/content`.
+3. Delete the `/docs` folder from the root.
+4. Go to `DOCUMENTATION/`.
+5. Run the `hugo` command to generate the HTML docs inside a new `/docs` folder.
+
+
+## Support new Software (Add new Container)
+
+* Fork the repo and clone the code.
+
+* Create folder as the software name (example: `mysql` - `nginx`).
+
+* Add your `Dockerfile` in the folder "you may add additional files as well".
+
+* Add the software to the `docker-compose.yml` file.
+
+* Make sure you follow the same code/comments style.
+
+* Add the environment variables to the `.env.example` if you have any.
+
+* **MOST IMPORTANTLY** update the `Documentation`, add as much information.
+
+* Submit a Pull Request, to the `master` branch.
+
+
+
+## Edit supported Software (Edit a Container)
+
+* Fork the repo and clone the code.
+
+* Open the software (container) folder (example: `mysql` - `nginx`).
+
+* Edit the files.
+
+* Make sure to update the `Documentation` in case you made any changes.
+
+* Submit a Pull Request, to the `master` branch.
+
+
+
+
+## Edit Base Image
+
+* Open any dockerfile, copy the base image name (example: `FROM phusion/baseimage:latest`).
+
+* Search for the image in the [Docker Hub](https://hub.docker.com/search/) and find the source..
+
+*Most of the image in Laradock are official images, these projects live in other repositories and maintainer by other organizations.*
+
+**Note:** Laradock has two base images for (`Workspace` and `php-fpm`, mainly made to speed up the build time on your machine.
+
+* Find the dockerfiles, edit them and submit a Pull Request.
+
+* When updating a Laradock base image (`Workspace` or `php-fpm`), ask a project maintainer "Admin" to build a new image after your PR is merged.
+
+**Note:** after the base image is updated, every dockerfile that uses that image, needs to update his base image tag to get the updated code.
+
+
+
+
+
+
+
+
+
+
+
+
+
+## Submit Pull Request Instructions
+
+### 1. Before Submitting a Pull Request (PR)
+
+Always Test everything and make sure its working:
+
+- Pull the latest updates (or fork of you don’t have permission)
+- Before editing anything:
+ - Test building the container (docker-compose build --no-cache container-name) build with no cache first.
+ - Test running the container with some other containers in real app and see of everything is working fine.
+- Now edit the container (edit section by section and test rebuilding the container after every edited section)
+ - Testing building the container (docker-compose build container-name) with no errors.
+ - Test it in a real App if possible.
+
+
+### 2. Submitting a PR
+Consider the following guidelines:
+
+* Search [GitHub](https://github.com/laradock/laradock/pulls) for an open or closed Pull Request that relates to your submission. You don't want to duplicate efforts.
+
+* Make your changes in a new git branch:
+
+ ```shell
+ git checkout -b my-fix-branch master
+ ```
+* Commit your changes using a descriptive commit message.
+
+* Push your branch to GitHub:
+
+ ```shell
+ git push origin my-fix-branch
+ ```
+
+* In GitHub, send a pull request to `laradock:master`.
+* If we suggest changes then:
+ * Make the required updates.
+ * Commit your changes to your branch (e.g. `my-fix-branch`).
+ * Push the changes to your GitHub repository (this will update your Pull Request).
+
+> If the PR gets too outdated we may ask you to rebase and force push to update the PR:
+
+```shell
+git rebase master -i
+git push origin my-fix-branch -f
+```
+
+*WARNING. Squashing or reverting commits and forced push thereafter may remove GitHub comments on code that were previously made by you and others in your commits.*
+
+
+### 3. After your PR is merged
+
+After your pull request is merged, you can safely delete your branch and pull the changes from the main (upstream) repository:
+
+* Delete the remote branch on GitHub either through the GitHub web UI or your local shell as follows:
+
+ ```shell
+ git push origin --delete my-fix-branch
+ ```
+
+* Check out the master branch:
+
+ ```shell
+ git checkout master -f
+ ```
+
+* Delete the local branch:
+
+ ```shell
+ git branch -D my-fix-branch
+ ```
+
+* Update your master with the latest upstream version:
+
+ ```shell
+ git pull --ff upstream master
+ ```
+
+
+
+
+
+
+## Happy Coding :)
diff --git a/laradock/DOCUMENTATION/content/documentation/index.md b/laradock/DOCUMENTATION/content/documentation/index.md
new file mode 100644
index 000000000..5d5e6c598
--- /dev/null
+++ b/laradock/DOCUMENTATION/content/documentation/index.md
@@ -0,0 +1,2521 @@
+---
+title: Documentation
+type: index
+weight: 3
+---
+
+
+
+
+
+
+
+## List current running Containers
+```bash
+docker ps
+```
+You can also use the following command if you want to see only this project containers:
+
+```bash
+docker-compose ps
+```
+
+
+
+
+
+
+
+
+## Close all running Containers
+```bash
+docker-compose stop
+```
+
+To stop single container do:
+
+```bash
+docker-compose stop {container-name}
+```
+
+
+
+
+
+
+
+
+## Delete all existing Containers
+```bash
+docker-compose down
+```
+
+
+
+
+
+
+
+
+## Enter a Container
+
+> Run commands in a running Container.
+
+1 - First list the currently running containers with `docker ps`
+
+2 - Enter any container using:
+
+```bash
+docker-compose exec {container-name} bash
+```
+
+*Example: enter MySQL container*
+
+```bash
+docker-compose exec mysql bash
+```
+
+*Example: enter to MySQL prompt within MySQL container*
+
+```bash
+docker-compose exec mysql mysql -udefault -psecret
+```
+
+3 - To exit a container, type `exit`.
+
+
+
+
+
+
+
+
+## Edit default Container config
+
+Open the `docker-compose.yml` and change anything you want.
+
+Examples:
+
+Change MySQL Database Name:
+
+```yml
+ environment:
+ MYSQL_DATABASE: laradock
+ ...
+```
+
+Change Redis default port to 1111:
+
+```yml
+ ports:
+ - "1111:6379"
+ ...
+```
+
+
+
+
+
+
+
+
+## Edit a Docker Image
+
+1 - Find the `Dockerfile` of the image you want to edit,
+
+example for `mysql` it will be `mysql/Dockerfile`.
+
+2 - Edit the file the way you want.
+
+3 - Re-build the container:
+
+```bash
+docker-compose build mysql
+```
+More info on Containers rebuilding [here](#Build-Re-build-Containers).
+
+
+
+
+
+
+
+
+
+## Build/Re-build Containers
+
+If you do any change to any `Dockerfile` make sure you run this command, for the changes to take effect:
+
+```bash
+docker-compose build
+```
+Optionally you can specify which container to rebuild (instead of rebuilding all the containers):
+
+```bash
+docker-compose build {container-name}
+```
+
+You might use the `--no-cache` option if you want full rebuilding (`docker-compose build --no-cache {container-name}`).
+
+
+
+
+
+
+
+
+## Add more Docker Images
+
+To add an image (software), just edit the `docker-compose.yml` and add your container details, to do so you need to be familiar with the [docker compose file syntax](https://docs.docker.com/compose/compose-file/).
+
+
+
+
+
+
+
+
+## View the Log files
+The NGINX Log file is stored in the `logs/nginx` directory.
+
+However to view the logs of all the other containers (MySQL, PHP-FPM,...) you can run this:
+
+```bash
+docker-compose logs {container-name}
+```
+
+```bash
+docker-compose logs -f {container-name}
+```
+
+More [options](https://docs.docker.com/compose/reference/logs/)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+## Install PHP Extensions
+
+You can set extensions to install in the .env file's corresponding section (`PHP_FPM`, `WORKSPACE`, `PHP_WORKER`),
+just change the `false` to `true` at the desired extension's line.
+After this you have to rebuild the container with the `--no-cache` option.
+
+```bash
+docker build --no-cache {container-name}
+```
+
+
+
+
+
+
+
+
+
+
+## Change the (PHP-FPM) Version
+
+By default, the latest stable PHP version is configured to run.
+
+>The PHP-FPM is responsible for serving your application code, you don't have to change the PHP-CLI version if you are planning to run your application on different PHP-FPM version.
+
+
+### A) Switch from PHP `7.2` to PHP `5.6`
+
+1 - Open the `.env`.
+
+2 - Search for `PHP_VERSION`.
+
+3 - Set the desired version number:
+
+```dotenv
+PHP_VERSION=5.6
+```
+
+4 - Finally rebuild the image
+
+```bash
+docker-compose build php-fpm
+```
+
+> For more details about the PHP base image, visit the [official PHP docker images](https://hub.docker.com/_/php/).
+
+
+
+
+
+
+
+
+## Change the PHP-CLI Version
+
+>Note: it's not very essential to edit the PHP-CLI version. The PHP-CLI is only used for the Artisan Commands & Composer. It doesn't serve your Application code, this is the PHP-FPM job.
+
+The PHP-CLI is installed in the Workspace container. To change the PHP-CLI version you need to simply change the `PHP_VERSION` in the .env file as follow:
+
+1 - Open the `.env`.
+
+2 - Search for `PHP_VERSION`.
+
+3 - Set the desired version number:
+
+```dotenv
+PHP_VERSION=7.2
+```
+
+4 - Finally rebuild the image
+
+```bash
+docker-compose build workspace
+```
+
+
+
+Change the PHP-CLI Version
+
+
+
+## Install xDebug
+
+1 - First install `xDebug` in the Workspace and the PHP-FPM Containers:
+
+a) open the `.env` file
+
+b) search for the `WORKSPACE_INSTALL_XDEBUG` argument under the Workspace settings
+
+c) set it to `true`
+
+d) search for the `PHP_FPM_INSTALL_XDEBUG` argument under the PHP-FPM settings
+
+e) set it to `true`
+
+2 - Re-build the containers `docker-compose build workspace php-fpm`
+
+For information on how to configure xDebug with your IDE and work it out, check this [Repository](https://github.com/LarryEitel/laravel-laradock-phpstorm) or follow up on the next section if you use linux and PhpStorm.
+
+```
+###########################################################
+################ Containers Customization #################
+###########################################################
+
+### WORKSPACE #############################################
+...
+WORKSPACE_INSTALL_XDEBUG=true
+...
+### PHP_FPM ###############################################
+...
+PHP_FPM_INSTALL_XDEBUG=true
+...
+```
+
+
+
+
+
+## Start/Stop xDebug:
+
+By installing xDebug, you are enabling it to run on startup by default.
+
+To control the behavior of xDebug (in the `php-fpm` Container), you can run the following commands from the Laradock root folder, (at the same prompt where you run docker-compose):
+
+- Stop xDebug from running by default: `.php-fpm/xdebug stop`.
+- Start xDebug by default: `.php-fpm/xdebug start`.
+- See the status: `.php-fpm/xdebug status`.
+
+Note: If `.php-fpm/xdebug` doesn't execute and gives `Permission Denied` error the problem can be that file `xdebug` doesn't have execution access. This can be fixed by running `chmod` command with desired access permissions.
+
+
+
+
+
+## Install pcov
+
+1 - First install `pcov` in the Workspace and the PHP-FPM Containers:
+
+a) open the `.env` file
+
+b) search for the `WORKSPACE_INSTALL_PCOV` argument under the Workspace Container
+
+c) set it to `true`
+
+d) search for the `PHP_FPM_INSTALL_PCOV` argument under the PHP-FPM Container
+
+e) set it to `true`
+
+2 - Re-build the containers `docker-compose build workspace php-fpm`
+
+Note that pcov is only supported on PHP 7.1 or newer. For more information on setting up pcov optimally, check the recommended section
+of the [README](https://github.com/krakjoe/pcov)
+
+
+
+
+
+## Install phpdbg
+
+Install `phpdbg` in the Workspace and the PHP-FPM Containers:
+
+
+1 - Open the `.env`.
+
+2 - Search for `WORKSPACE_INSTALL_PHPDBG`.
+
+3 - Set value to `true`
+
+4 - Do the same for `PHP_FPM_INSTALL_PHPDBG`
+
+```dotenv
+WORKSPACE_INSTALL_PHPDBG=true
+```
+```dotenv
+PHP_FPM_INSTALL_PHPDBG=true
+```
+
+
+
+
+
+
+## Install ionCube Loader
+
+1 - First install `ionCube Loader` in the Workspace and the PHP-FPM Containers:
+
+a) open the `.env` file
+
+b) search for the `WORKSPACE_INSTALL_IONCUBE` argument under the Workspace Container
+
+c) set it to `true`
+
+d) search for the `PHP_FPM_INSTALL_IONCUBE` argument under the PHP-FPM Container
+
+e) set it to `true`
+
+2 - Re-build the containers `docker-compose build workspace php-fpm`
+
+Always download the latest version of [Loaders for ionCube ](http://www.ioncube.com/loaders.php).
+
+
+
+
+
+
+
+## Install Deployer
+
+> A deployment tool for PHP.
+
+1 - Open the `.env` file
+
+2 - Search for the `WORKSPACE_INSTALL_DEPLOYER` argument under the Workspace Container
+
+3 - Set it to `true`
+
+
+4 - Re-build the containers `docker-compose build workspace`
+
+[**Deployer Documentation Here**](https://deployer.org/docs/getting-started.html)
+
+
+
+
+
+
+## Install SonarQube
+
+> An automatic code review tool.
+
+SonarQube® is an automatic code review tool to detect bugs, vulnerabilities and code smells in your code. It can integrate with your existing workflow to enable continuous code inspection across your project branches and pull requests.
+
+1 - Open the `.env` file
+
+2 - Search for the `SONARQUBE_HOSTNAME=sonar.example.com` argument
+
+3 - Set it to your-domain `sonar.example.com`
+
+4 - `docker-compose up -d sonarqube`
+
+5 - Open your browser: http://localhost:9000/
+
+Troubleshooting:
+
+if you encounter a database error:
+```
+docker-compose exec --user=root postgres
+source docker-entrypoint-initdb.d/init_sonarqube_db.sh
+```
+
+If you encounter logs error:
+```
+docker-compose run --user=root --rm sonarqube chown sonarqube:sonarqube /opt/sonarqube/logs
+```
+[**SonarQube Documentation Here**](https://docs.sonarqube.org/latest/)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+## Prepare Laradock for Production
+
+It's recommended for production to create a custom `docker-compose.yml` file, for example, `production-docker-compose.yml`
+
+In your new production `docker-compose.yml` file, you should include only the containers you are planning to run in production (usage example: `docker-compose -f production-docker-compose.yml up -d nginx mysql redis ...`).
+
+Note: The Database (MySQL/MariaDB/...) ports should not be forwarded on production, because Docker will automatically publish the port on the host unless specifically told not to. Forwarding these ports on production is quite insecure - so make sure to remove these lines:
+
+```
+ports:
+ - "3306:3306"
+```
+
+To learn more about how Docker publishes ports, please read [this excellent post on the subject](https://fralef.me/docker-and-iptables.html).
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+## Install Laravel from Container
+
+1 - First you need to enter the Workspace Container.
+
+2 - Install Laravel.
+
+Example using Composer
+
+```bash
+composer create-project laravel/laravel my-cool-app "5.2.*"
+```
+
+> We recommend using `composer create-project` instead of the Laravel installer, to install Laravel.
+
+For more about the Laravel installation click [here](https://laravel.com/docs/master#installing-laravel).
+
+
+3 - Edit `.env` to Map the new application path:
+
+By default, Laradock assumes the Laravel application is living in the parent directory of the laradock folder.
+
+Since the new Laravel application is in the `my-cool-app` folder, we need to replace `../:/var/www` with `../my-cool-app/:/var/www`, as follow:
+
+```dotenv
+ APP_CODE_PATH_HOST=../my-cool-app/
+```
+4 - Go to that folder and start working.
+
+```bash
+cd my-cool-app
+```
+
+5 - Go back to the Laradock installation steps to see how to edit the `.env` file.
+
+
+
+
+
+
+
+
+## Run Artisan Commands
+
+You can run artisan commands and many other Terminal commands from the Workspace container.
+
+1 - Make sure you have the workspace container running.
+
+```bash
+docker-compose up -d workspace // ..and all your other containers
+```
+
+2 - Find the Workspace container name:
+
+```bash
+docker-compose ps
+```
+
+3 - Enter the Workspace container:
+
+```bash
+docker-compose exec workspace bash
+```
+
+Note: Should add `--user=laradock` (example `docker-compose exec --user=laradock workspace bash`) to have files created as your host's user to prevent issue owner of log file will be changed to root then laravel website cannot write on log file if using rotated log and new log file not existed
+
+
+4 - Run anything you want :)
+
+```bash
+php artisan
+```
+```bash
+composer update
+```
+```bash
+phpunit
+```
+```
+vue serve
+```
+(browse the results at `http://localhost:[WORKSPACE_VUE_CLI_SERVE_HOST_PORT]`)
+```
+vue ui
+```
+(browse the results at `http://localhost:[WORKSPACE_VUE_CLI_UI_HOST_PORT]`)
+
+
+
+
+
+
+## Run Laravel Queue Worker
+
+1 - Create a suitable configuration file (for example named `laravel-worker.conf`) for Laravel Queue Worker in `php-worker/supervisord.d/` by simply copying from `laravel-worker.conf.example`
+
+2 - Start everything up
+
+```bash
+docker-compose up -d php-worker
+```
+
+
+
+
+
+
+
+
+## Run Laravel Scheduler
+
+Laradock provides 2 ways to run Laravel Scheduler
+1. Using cron in workspace container.
+Most of the time, when you start Laradock, it'll automatically start workspace container with cron inside, along with setting to run `schedule:run` command every minute.
+2. Using Supervisord in php-worker to run `schedule:run`.
+This way is suggested when you don't want to start workspace in production environment.
+ * Comment out cron setting in workspace container, file `workspace/crontab/laradock`
+ ```bash
+ # * * * * * laradock /usr/bin/php /var/www/artisan schedule:run >> /dev/null 2>&1
+ ```
+ * Create a suitable configuration file (for ex., named `laravel-scheduler.conf`) for Laravel Scheduler in `php-worker/supervisord.d/` by simply copying from `laravel-scheduler.conf.example`
+
+ * Start php-worker container
+ ```bash
+ docker-compose up -d php-worker
+ ```
+
+
+## Use Browsersync
+
+> Using Use Browsersync with Laravel Mix.
+
+1. Add the following settings to your `webpack.mix.js` file. Please refer to Browsersync [Options](https://browsersync.io/docs/options) page for more options.
+
+```
+const mix = require('laravel-mix')
+
+(...)
+
+mix.browserSync({
+ open: false,
+ proxy: 'nginx' // replace with your web server container
+})
+```
+
+2. Run `npm run watch` within your `workspace` container.
+
+3. Open your browser and visit address `http://localhost:[WORKSPACE_BROWSERSYNC_HOST_PORT]`. It will refresh the page automatically whenever you edit any source file in your project.
+
+4. If you wish to access Browsersync UI for your project, visit address `http://localhost:[WORKSPACE_BROWSERSYNC_UI_HOST_PORT]`.
+
+
+
+
+
+
+## Use Mailu
+
+1. You will need a registered domain.
+
+2. Required RECAPTCHA for signup email [HERE](https://www.google.com/recaptcha/admin)
+
+3. Modify following environment variable in `.env` file
+
+```
+MAILU_RECAPTCHA_PUBLIC_KEY=
+MAILU_RECAPTCHA_PRIVATE_KEY=
+MAILU_DOMAIN=laradock.io
+MAILU_HOSTNAMES=mail.laradock.io
+```
+
+4. Open your browser and visit `http://YOUR_DOMAIN`.
+
+
+
+
+## Use NetData
+
+1. Run the NetData Container (`netdata`) with the `docker-compose up` command. Example:
+
+```bash
+docker-compose up -d netdata
+```
+
+2. Open your browser and visit the localhost on port **19999**: `http://localhost:19999`
+
+
+
+## Use Metabase
+
+1. Run the Metabase Container (`metabase`) with the `docker-compose up` command. Example:
+ ```bash
+ docker-compose up -d metabase
+ ```
+2. Open your browser and visit the localhost on port **3030**: `http://localhost:3030`
+
+3. You can use environment to configure Metabase container. See docs in: [Running Metabase on Docker](https://www.metabase.com/docs/v0.12.0/operations-guide/running-metabase-on-docker.html)
+
+
+
+
+
+
+
+## Use Jenkins
+
+1) Boot the container `docker-compose up -d jenkins`. To enter the container type `docker-compose exec jenkins bash`.
+
+2) Go to `http://localhost:8090/` (if you didn't change your default port mapping)
+
+3) Authenticate from the web app.
+
+- Default username is `admin`.
+- Default password is `docker-compose exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword`.
+
+(To enter container as root type `docker-compose exec --user root jenkins bash`).
+
+4) Install some plugins.
+
+5) Create your first Admin user, or continue as Admin.
+
+Note: to add user go to `http://localhost:8090/securityRealm/addUser` and to restart it from the web app visit `http://localhost:8090/restart`.
+
+You may wanna change the default security configuration, so go to `http://localhost:8090/configureSecurity/` under Authorization and choosing "Anyone can do anything" or "Project-based Matrix Authorization Strategy" or anything else.
+
+
+
+
+
+
+
+
+
+## Use Redis
+
+1. First make sure you run the Redis Container (`redis`) with the `docker-compose up` command.
+ ```bash
+ docker-compose up -d redis
+ ```
+ > To execute redis commands, enter the redis container first `docker-compose exec redis bash` then enter the `redis-cli`.
+
+2. Open your Laravel's `.env` file and set the `REDIS_HOST` to `redis`
+ ```env
+ REDIS_HOST=redis
+ ```
+ If you're using Laravel, and you don't find the `REDIS_HOST` variable in your `.env` file. Go to the database configuration file `config/database.php` and replace the default `127.0.0.1` IP with `redis` for Redis like this:
+ ```php
+ 'redis' => [
+ 'cluster' => false,
+ 'default' => [
+ 'host' => 'redis',
+ 'port' => 6379,
+ 'database' => 0,
+ ],
+ ],
+ ```
+3. To enable Redis Caching and/or for Sessions Management. Also from the `.env` file set `CACHE_DRIVER` and `SESSION_DRIVER` to `redis` instead of the default `file`.
+ ```env
+ CACHE_DRIVER=redis
+ SESSION_DRIVER=redis
+ ```
+4. Finally make sure you have the `predis/predis` package `(~1.0)` installed via Composer:
+ ```bash
+ composer require predis/predis:^1.0
+ ```
+5. You can manually test it from Laravel with this code:
+ ```php
+ \Cache::store('redis')->put('Laradock', 'Awesome', 10);
+ ```
+
+
+
+
+
+
+
+## Use Redis Cluster
+1. First make sure you run the Redis-Cluster Container (`redis-cluster`) with the `docker-compose up` command.
+ ```bash
+ docker-compose up -d redis-cluster
+ ```
+2. Open your Laravel's `config/database.php` and set the redis cluster configuration. Below is example configuration with phpredis.
+ Read the [Laravel official documentation](https://laravel.com/docs/5.7/redis#configuration) for more details.
+ ```php
+ 'redis' => [
+ 'client' => 'phpredis',
+ 'options' => [
+ 'cluster' => 'redis',
+ ],
+ 'clusters' => [
+ 'default' => [
+ [
+ 'host' => 'redis-cluster',
+ 'password' => null,
+ 'port' => 7000,
+ 'database' => 0,
+ ],
+ ],
+ ],
+ ],
+ ```
+
+
+
+
+## Use Varnish
+
+The goal was to proxy the request to varnish server using nginx. So only nginx has been configured for Varnish proxy.
+Nginx is on port 80 or 443. Nginx sends request through varnish server and varnish server sends request back to nginx on port 81 (external port is defined in `VARNISH_BACKEND_PORT`).
+
+The idea was taken from this [post](https://www.linode.com/docs/websites/varnish/use-varnish-and-nginx-to-serve-wordpress-over-ssl-and-http-on-debian-8/)
+
+The Varnish configuration was developed and tested for Wordpress only. Probably it works with other systems.
+
+#### Steps to configure varnish proxy server:
+1. You have to set domain name for VARNISH_PROXY1_BACKEND_HOST variable.
+2. If you want to use varnish for different domains, you have to add new configuration section in your env file.
+ ```
+ VARNISH_PROXY1_CACHE_SIZE=128m
+ VARNISH_PROXY1_BACKEND_HOST=replace_with_your_domain.name
+ VARNISH_PROXY1_SERVER=SERVER1
+ ```
+3. Then you have to add new config section into docker-compose.yml with related variables:
+ ```
+ custom_proxy_name:
+ container_name: custom_proxy_name
+ build: ./varnish
+ expose:
+ - ${VARNISH_PORT}
+ environment:
+ - VARNISH_CONFIG=${VARNISH_CONFIG}
+ - CACHE_SIZE=${VARNISH_PROXY2_CACHE_SIZE}
+ - VARNISHD_PARAMS=${VARNISHD_PARAMS}
+ - VARNISH_PORT=${VARNISH_PORT}
+ - BACKEND_HOST=${VARNISH_PROXY2_BACKEND_HOST}
+ - BACKEND_PORT=${VARNISH_BACKEND_PORT}
+ - VARNISH_SERVER=${VARNISH_PROXY2_SERVER}
+ ports:
+ - "${VARNISH_PORT}:${VARNISH_PORT}"
+ links:
+ - workspace
+ networks:
+ - frontend
+ ```
+4. change your varnish config and add nginx configuration. Example Nginx configuration is here: `nginx/sites/laravel_varnish.conf.example`.
+5. `varnish/default.vcl` is old varnish configuration, which was used in the previous version. Use `default_wordpress.vcl` instead.
+
+#### How to run:
+1. Rename `default_wordpress.vcl` to `default.vcl`
+2. `docker-compose up -d nginx`
+3. `docker-compose up -d proxy`
+
+Keep in mind that varnish server must be built after Nginx cause varnish checks domain affordability.
+
+#### FAQ:
+
+1. How to purge cache?
+run from any cli: `curl -X PURGE https://yourwebsite.com/`.
+2. How to reload varnish?
+`docker container exec proxy varnishreload`
+3. Which varnish commands are allowed?
+ - varnishadm
+ - varnishd
+ - varnishhist
+ - varnishlog
+ - varnishncsa
+ - varnishreload
+ - varnishstat
+ - varnishtest
+ - varnishtop
+4. How to reload Nginx?
+`docker exec Nginx nginx -t`
+`docker exec Nginx nginx -s reload`
+
+
+
+
+## Use Mongo
+1. First install `mongo` in the Workspace and the PHP-FPM Containers:
+ * open the `.env` file
+ * search for the `WORKSPACE_INSTALL_MONGO` argument under the Workspace Container
+ * set it to `true`
+ * search for the `PHP_FPM_INSTALL_MONGO` argument under the PHP-FPM Container
+ * set it to `true`
+2. Re-build the containers
+ * `docker-compose build workspace php-fpm`
+3. Run the MongoDB Container (`mongo`) with the `docker-compose up` command.
+ ```bash
+ docker-compose up -d mongo
+ ```
+4. Add the MongoDB configurations to the `config/database.php` configuration file:
+ ```php
+ 'connections' => [
+
+ 'mongodb' => [
+ 'driver' => 'mongodb',
+ 'host' => env('DB_HOST', 'localhost'),
+ 'port' => env('DB_PORT', 27017),
+ 'database' => env('DB_DATABASE', 'database'),
+ 'username' => '',
+ 'password' => '',
+ 'options' => [
+ 'database' => '',
+ ]
+ ],
+
+ // ...
+
+ ],
+
+ // ...
+
+],
+```
+
+5 - Open your Laravel's `.env` file and update the following variables:
+
+- set the `DB_HOST` to your `mongo`.
+- set the `DB_PORT` to `27017`.
+- set the `DB_DATABASE` to `database`.
+
+
+6 - Finally make sure you have the `jenssegers/mongodb` package installed via Composer and its Service Provider is added.
+
+```bash
+composer require jenssegers/mongodb
+```
+More details about this [here](https://github.com/jenssegers/laravel-mongodb#installation).
+
+7 - Test it:
+
+- First, let your Models extend from the Mongo Eloquent Model. Check the [documentation](https://github.com/jenssegers/laravel-mongodb#eloquent).
+- Enter the Workspace Container.
+- Migrate the Database `php artisan migrate`.
+
+
+
+
+
+
+
+
+## Use PhpMyAdmin
+1. Run the phpMyAdmin Container (`phpmyadmin`) with the `docker-compose up` command.
+ ```bash
+ # use with mysql
+ docker-compose up -d mysql phpmyadmin
+
+ # use with mariadb
+ docker-compose up -d mariadb phpmyadmin
+ ```
+ *Note: To use with MariaDB, open `.env` and set `PMA_DB_ENGINE=mysql` to `PMA_DB_ENGINE=mariadb`.*
+2. Open your browser and visit the localhost on port **8081**: `http://localhost:8081`, use server: "mysql", user: "default" and password: "secret for the default mysql setup.
+
+
+
+
+
+
+
+## Use Gitlab
+1. Run the Gitlab Container (`gitlab`) with the `docker-compose up` command. Example:
+ ```bash
+ docker-compose up -d gitlab
+ ```
+2. Open your browser and visit the localhost on port **8989**: `http://localhost:8989`
+*Note: You may change GITLAB_DOMAIN_NAME to your own domain name like `http://gitlab.example.com` default is `http://localhost`*
+
+
+
+
+
+
+
+
+## Use Gitlab Runner
+1. Retrieve the registration token in your gitlab project (Settings > CI / CD > Runners > Set up a specific Runner manually)
+2. Open the `.env` file and set the following changes:
+ ```
+ # so that gitlab container will pass the correct domain to gitlab-runner container
+ GITLAB_DOMAIN_NAME=http://gitlab
+
+ GITLAB_RUNNER_REGISTRATION_TOKEN=
+
+ # so that gitlab-runner container will send POST request for registration to correct domain
+ GITLAB_CI_SERVER_URL=http://gitlab
+ ```
+3. Open the `docker-compose.yml` file and add the following changes:
+ ```yml
+ gitlab-runner:
+ environment: # these values will be used during `gitlab-runner register`
+ - RUNNER_EXECUTOR=docker # change from shell (default)
+ - DOCKER_IMAGE=alpine
+ - DOCKER_NETWORK_MODE=laradock_backend
+ networks:
+ - backend # connect to network where gitlab service is connected
+ ```
+4. Run the Gitlab-Runner Container (`gitlab-runner`) with the `docker-compose up` command. Example:
+ ```bash
+ docker-compose up -d gitlab-runner
+ ```
+5. Register the gitlab-runner to the gitlab container
+ ```bash
+ docker-compose exec gitlab-runner bash
+ gitlab-runner register
+ ```
+
+6. Create a `.gitlab-ci.yml` file for your pipeline
+ ```yml
+ before_script:
+ - echo Hello!
+
+ job1:
+ scripts:
+ - echo job1
+ ```
+7. Push changes to gitlab
+8. Verify that pipeline is run successful
+
+
+
+
+
+
+## Use Adminer
+
+1. Run the Adminer Container (`adminer`) with the `docker-compose up` command. Example:
+ ```bash
+ docker-compose up -d adminer
+ ```
+2. Open your browser and visit the localhost on port **8080**: `http://localhost:8080`
+
+#### Additional Notes
+
+- You can load plugins in the `ADM_PLUGINS` variable in the `.env` file. If a plugin requires parameters to work correctly you will need to add a custom file to the container. [Find more info in section 'Loading plugins'](https://hub.docker.com/_/adminer).
+
+- You can choose a design in the `ADM_DESIGN` variable in the `.env` file. [Find more info in section 'Choosing a design'](https://hub.docker.com/_/adminer).
+
+- You can specify the default host with the `ADM_DEFAULT_SERVER` variable in the `.env` file. This is useful if you are connecting to an external server or a docker container named something other than the default `mysql`.
+
+
+
+
+
+
+
+## Use Portainer
+1. Run the Portainer Container (`portainer`) with the `docker-compose up` command. Example:
+ ```bash
+ docker-compose up -d portainer
+ ```
+2. Open your browser and visit the localhost on port **9010**: `http://localhost:9010`
+
+
+
+
+
+
+
+
+## Use PgAdmin
+1. Run the pgAdmin Container (`pgadmin`) with the `docker-compose up` command. Example:
+ ```bash
+ docker-compose up -d postgres pgadmin
+ ```
+2. Open your browser and visit the localhost on port **5050**: `http://localhost:5050`
+3. At login page use default credentials:
+ Username : pgadmin4@pgadmin.org
+ Password : admin
+
+
+
+
+
+
+
+## Use Beanstalkd
+1. Run the Beanstalkd Container:
+ ```bash
+ docker-compose up -d beanstalkd
+ ```
+2. Configure Laravel to connect to that container by editing the `config/queue.php` config file.
+ * first set `beanstalkd` as default queue driver
+ * set the queue host to beanstalkd : `QUEUE_HOST=beanstalkd`
+ *beanstalkd is now available on default port `11300`.*
+3. Require the dependency package [pda/pheanstalk](https://github.com/pda/pheanstalk) using composer.
+ Optionally you can use the Beanstalkd Console Container to manage your Queues from a web interface.
+ * Run the Beanstalkd Console Container:
+ ```bash
+ docker-compose up -d beanstalkd-console
+ ```
+ * Open your browser and visit `http://localhost:2080/`
+ _Note: You can customize the port on which beanstalkd console is listening by changing `BEANSTALKD_CONSOLE_HOST_PORT` in `.env`. The default value is *2080*._
+
+ * Add the server
+ - Host: beanstalkd
+ - Port: 11300
+4. Done
+
+
+
+
+
+
+
+## Use Confluence
+1. Run the Confluence Container (`confluence`) with the `docker-compose up` command. Example:
+ ```bash
+ docker-compose up -d confluence
+ ```
+
+2 - Open your browser and visit the localhost on port **8090**: `http://localhost:8090`
+
+**Note:** Confluence is a licensed application - an evaluation licence can be obtained from Atlassian.
+
+You can set custom confluence version in `CONFLUENCE_VERSION`. [Find more info in section 'Versioning'](https://hub.docker.com/r/atlassian/confluence-server/)
+
+
+##### Confluence usage with Nginx and SSL.
+
+1. Find an instance configuration file in `nginx/sites/confluence.conf.example` and replace sample domain with yours.
+
+2. Configure ssl keys to your domain.
+
+Keep in mind that Confluence is still accessible on 8090 anyway.
+
+
+
+## Use ElasticSearch
+
+1 - Run the ElasticSearch Container (`elasticsearch`) with the `docker-compose up` command:
+
+```bash
+docker-compose up -d elasticsearch
+```
+
+2 - Open your browser and visit the localhost on port **9200**: `http://localhost:9200`
+
+> The default username is `elastic` and the default password is `changeme`.
+
+### Install ElasticSearch Plugin
+
+1. Install an ElasticSearch plugin.
+ ```bash
+ docker-compose exec elasticsearch /usr/share/elasticsearch/bin/plugin install {plugin-name}
+ ```
+2. Restart elasticsearch container
+ ```bash
+ docker-compose restart elasticsearch
+ ```
+
+
+
+
+## Use MeiliSearch
+
+1 - Run the MeiliSearch Container (`meilisearch`) with the `docker-compose up` command. Example:
+
+```bash
+docker-compose up -d meilisearch
+```
+
+2 - Open your browser and visit the localhost on port **7700** at the following URL: `http://localhost:7700`
+
+> The private API key is `masterkey`
+
+
+
+
+
+## Use Selenium
+1. Run the Selenium Container (`selenium`) with the `docker-compose up` command. Example:
+ ```bash
+ docker-compose up -d selenium
+ ```
+2. Open your browser and visit the localhost on port **4444** at the following URL: `http://localhost:4444/wd/hub`
+
+
+
+
+
+
+
+
+## Use RethinkDB
+
+The RethinkDB is an open-source Database for Real-time Web ([RethinkDB](https://rethinkdb.com/)).
+A package ([Laravel RethinkDB](https://github.com/duxet/laravel-rethinkdb)) is being developed and was released a version for Laravel 5.2 (experimental).
+
+1. Run the RethinkDB Container (`rethinkdb`) with the `docker-compose up` command.
+ ```bash
+ docker-compose up -d rethinkdb
+ ```
+
+2. Access the RethinkDB Administration Console [http://localhost:8090/#tables](http://localhost:8090/#tables) for create a database called `database`.
+
+3. Add the RethinkDB configurations to the `config/database.php` configuration file:
+ ```php
+ 'connections' => [
+
+ 'rethinkdb' => [
+ 'name' => 'rethinkdb',
+ 'driver' => 'rethinkdb',
+ 'host' => env('DB_HOST', 'rethinkdb'),
+ 'port' => env('DB_PORT', 28015),
+ 'database' => env('DB_DATABASE', 'test'),
+ ]
+
+ // ...
+
+ ],
+ ```
+
+4. Open your Laravel's `.env` file and update the following variables:
+ - set the `DB_CONNECTION` to your `rethinkdb`.
+ - set the `DB_HOST` to `rethinkdb`.
+ - set the `DB_PORT` to `28015`.
+ - set the `DB_DATABASE` to `database`.
+
+
+#### Additional Notes
+
+- You may do backing up of your data using the next reference: [backing up your data](https://www.rethinkdb.com/docs/backup/).
+
+
+
+
+## Use Minio
+
+1. Configure Minio:
+ - On the workspace container, change `INSTALL_MC` to true to get the client
+ - Set `MINIO_ACCESS_KEY` and `MINIO_ACCESS_SECRET` if you wish to set proper keys
+2. Run the Minio Container (`minio`) with the `docker-compose up` command. Example:
+ ```bash
+ docker-compose up -d minio
+ ```
+3. Open your browser and visit the localhost on port **9000** at the following URL: `http://localhost:9000`
+4. Create a bucket either through the webui or using the mc client:
+ ```bash
+ mc mb minio/bucket
+ ```
+5 - When configuring your other clients use the following details:
+ ```
+ AWS_URL=http://minio:9000
+ AWS_ACCESS_KEY_ID=access
+ AWS_SECRET_ACCESS_KEY=secretkey
+ AWS_DEFAULT_REGION=us-east-1
+ AWS_BUCKET=test
+ AWS_PATH_STYLE=true
+ ```
+6 - In `filesystems.php` you shoud use the following details (s3):
+ ```
+'s3' => [
+ 'driver' => 's3',
+ 'key' => env('AWS_ACCESS_KEY_ID'),
+ 'secret' => env('AWS_SECRET_ACCESS_KEY'),
+ 'region' => env('AWS_DEFAULT_REGION'),
+ 'bucket' => env('AWS_BUCKET'),
+ 'endpoint' => env('AWS_URL'),
+ 'use_path_style_endpoint' => env('AWS_PATH_STYLE', false)
+ ],
+```
+`'AWS_PATH_STYLE'` shout set to true only for local purpouse
+
+
+
+
+
+
+
+## Use Thumbor
+
+Thumbor is a smart imaging service. It enables on-demand crop, resizing and flipping of images. ([Thumbor](https://github.com/thumbor/thumbor))
+
+1 - Configure Thumbor:
+ - Checkout all the options under the thumbor settings
+
+
+2 - Run the Thumbor Container (`minio`) with the `docker-compose up` command. Example:
+
+```bash
+docker-compose up -d thumbor
+```
+
+3 - Navigate to an example image on `http://localhost:8000/unsafe/300x300/i.imgur.com/bvjzPct.jpg`
+
+For more documentation on Thumbor visit the [Thumbor documenation](http://thumbor.readthedocs.io/en/latest/index.html) page
+
+
+
+
+## Use AWS
+
+1 - Configure AWS:
+ - make sure to add your SSH keys in aws-eb-cli/ssh_keys folder
+
+2 - Run the Aws Container (`aws`) with the `docker-compose up` command. Example:
+
+```bash
+docker-compose up -d aws
+```
+
+3 - Access the aws container with `docker-compose exec aws bash`
+
+4 - To start using eb cli inside the container, initialize your project first by doing 'eb init'. Read the [aws eb cli](http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/eb-cli3-configuration.html) docs for more details.
+
+
+
+
+
+
+
+
+## Use Grafana
+
+1 - Configure Grafana: Change Port using `GRAFANA_PORT` if you wish to. Default is port 3000.
+
+2 - Run the Grafana Container (`grafana`) with the `docker-compose up`command:
+
+```bash
+docker-compose up -d grafana
+```
+
+3 - Open your browser and visit the localhost on port **3000** at the following URL: `http://localhost:3000`
+
+4 - Login using the credentials User = `admin`, Password = `admin`. Change the password in the web interface if you want to.
+
+
+
+
+
+
+
+
+## Use Graylog
+
+1 - Boot the container `docker-compose up -d graylog`
+
+2 - Open your Laravel's `.env` file and set the `GRAYLOG_PASSWORD` to some passsword, and `GRAYLOG_SHA256_PASSWORD` to the sha256 representation of your password (`GRAYLOG_SHA256_PASSWORD` is what matters, `GRAYLOG_PASSWORD` is just a reminder of your password).
+
+> Your password must be at least 16 characters long
+> You can generate sha256 of some password with the following command `echo -n somesupersecretpassword | sha256sum`
+
+```env
+GRAYLOG_PASSWORD=somesupersecretpassword
+GRAYLOG_SHA256_PASSWORD=b1cb6e31e172577918c9e7806c572b5ed8477d3f57aa737bee4b5b1db3696f09
+```
+
+3 - Go to `http://localhost:9000/` (if your port is not changed)
+
+4 - Authenticate from the app.
+
+> Username: admin
+> Password: somesupersecretpassword (if you haven't changed the password)
+
+5 - Go to the system->inputs and launch new input
+
+
+
+
+
+
+
+
+## Use Traefik
+
+To use Traefik you need to do some changes in `.env` and `docker-compose.yml`.
+
+1 - Open `.env` and change `ACME_DOMAIN` to your domain and `ACME_EMAIL` to your email.
+
+2 - You need to change the `docker-compose.yml` file to match the Traefik needs. If you want to use Traefik, you must not expose the ports of each container to the internet, but specify some labels.
+
+2.1 For example, let's try with NGINX. You must have:
+
+```bash
+nginx:
+ build:
+ context: ./nginx
+ args:
+ - PHP_UPSTREAM_CONTAINER=${NGINX_PHP_UPSTREAM_CONTAINER}
+ - PHP_UPSTREAM_PORT=${NGINX_PHP_UPSTREAM_PORT}
+ - CHANGE_SOURCE=${CHANGE_SOURCE}
+ volumes:
+ - ${APP_CODE_PATH_HOST}:${APP_CODE_PATH_CONTAINER}
+ - ${NGINX_HOST_LOG_PATH}:/var/log/nginx
+ - ${NGINX_SITES_PATH}:/etc/nginx/sites-available
+ depends_on:
+ - php-fpm
+ networks:
+ - frontend
+ - backend
+ labels:
+ - "traefik.enable=true"
+ - "traefik.http.services.nginx.loadbalancer.server.port=80"
+ # https router
+ - "traefik.http.routers.https.rule=Host(`${ACME_DOMAIN}`, `www.${ACME_DOMAIN}`)"
+ - "traefik.http.routers.https.entrypoints=https"
+ - "traefik.http.routers.https.middlewares=www-redirectregex"
+ - "traefik.http.routers.https.service=nginx"
+ - "traefik.http.routers.https.tls.certresolver=letsencrypt"
+ # http router
+ - "traefik.http.routers.http.rule=Host(`${ACME_DOMAIN}`, `www.${ACME_DOMAIN}`)"
+ - "traefik.http.routers.http.entrypoints=http"
+ - "traefik.http.routers.http.middlewares=http-redirectscheme"
+ - "traefik.http.routers.http.service=nginx"
+ # middlewares
+ - "traefik.http.middlewares.www-redirectregex.redirectregex.permanent=true"
+ - "traefik.http.middlewares.www-redirectregex.redirectregex.regex=^https://www.(.*)"
+ - "traefik.http.middlewares.www-redirectregex.redirectregex.replacement=https://$$1"
+ - "traefik.http.middlewares.http-redirectscheme.redirectscheme.permanent=true"
+ - "traefik.http.middlewares.http-redirectscheme.redirectscheme.scheme=https"
+```
+
+instead of
+
+```bash
+nginx:
+ build:
+ context: ./nginx
+ args:
+ - PHP_UPSTREAM_CONTAINER=${NGINX_PHP_UPSTREAM_CONTAINER}
+ - PHP_UPSTREAM_PORT=${NGINX_PHP_UPSTREAM_PORT}
+ - CHANGE_SOURCE=${CHANGE_SOURCE}
+ volumes:
+ - ${APP_CODE_PATH_HOST}:${APP_CODE_PATH_CONTAINER}
+ - ${NGINX_HOST_LOG_PATH}:/var/log/nginx
+ - ${NGINX_SITES_PATH}:/etc/nginx/sites-available
+ - ${NGINX_SSL_PATH}:/etc/nginx/ssl
+ ports:
+ - "${NGINX_HOST_HTTP_PORT}:80"
+ - "${NGINX_HOST_HTTPS_PORT}:443"
+ depends_on:
+ - php-fpm
+ networks:
+ - frontend
+ - backend
+```
+
+
+
+
+
+
+
+## Use Mosquitto (MQTT Broker)
+
+1 - Configure Mosquitto: Change Port using `MOSQUITTO_PORT` if you wish to. Default is port 9001.
+
+2 - Run the Mosquitto Container (`mosquitto`) with the `docker-compose up`command:
+
+```bash
+docker-compose up -d mosquitto
+```
+
+3 - Open your command line and use a MQTT Client (Eg. https://github.com/mqttjs/MQTT.js) to subscribe a topic and publish a message.
+
+4 - Subscribe: `mqtt sub -t 'test' -h localhost -p 9001 -C 'ws' -v`
+
+5 - Publish: `mqtt pub -t 'test' -h localhost -p 9001 -C 'ws' -m 'Hello!'`
+
+
+
+
+## Use Tarantool (+ Admin panel)
+
+1 - Configure Tarantool Port and Tarantool Admin Port using environment variables: `TARANTOOL_PORT` and `TARANTOOL_ADMIN_PORT`. Default ports are 3301 and 8002.
+
+2 - Run the Tarantool and Tarantool Admin tool using `docker-compose up`command:
+
+```bash
+docker-compose up -d tarantool tarantool-admin
+```
+
+3 - You can open admin tool visiting localhost:8002
+
+4 - There you should set `Hostname` with the value `tarantool`
+
+5 - After that your tarantool data will be available inside admin panel.
+
+6 - Also you can connect to tarantool server in console mode with this command:
+
+```bash
+docker-compose exec tarantool console
+```
+
+7 - There you can operate with tarantool database ([official documentation](https://www.tarantool.io/en/doc/latest/) can be helpful).
+
+
+
+
+
+
+
+
+
+
+
+
+## Install CodeIgniter
+
+To install CodeIgniter 3 on Laradock all you have to do is the following simple steps:
+
+1 - Open the `docker-compose.yml` file.
+
+2 - Change `CODEIGNITER=false` to `CODEIGNITER=true`.
+
+3 - Re-build your PHP-FPM Container `docker-compose build php-fpm`.
+
+
+
+
+
+
+
+
+## Install Powerline
+
+1 - Open the `.env` file and set `WORKSPACE_INSTALL_POWERLINE` and `WORKSPACE_INSTALL_PYTHON` to `true`.
+
+2 - Run `docker-compose build workspace`, after the step above.
+
+Powerline is required python
+
+
+
+
+
+
+
+
+## Install Symfony
+
+1 - Open the `.env` file and set `WORKSPACE_INSTALL_SYMFONY` to `true`.
+
+2 - Run `docker-compose build workspace`, after the step above.
+
+3 - The NGINX sites include a default config file for your Symfony project `symfony.conf.example`, so edit it and make sure the `root` is pointing to your project `web` directory.
+
+4 - Run `docker-compose restart` if the container was already running, before the step above.
+
+5 - Visit `symfony.test`
+
+
+
+
+
+
+
+
+## Miscellaneous
+
+
+
+
+
+
+
+
+## Change the timezone
+
+To change the timezone for the `workspace` container, modify the `TZ` build argument in the Docker Compose file to one in the [TZ database](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones).
+
+For example, if I want the timezone to be `New York`:
+
+```yml
+ workspace:
+ build:
+ context: ./workspace
+ args:
+ - TZ=America/New_York
+ ...
+```
+
+We also recommend [setting the timezone in Laravel](http://www.camroncade.com/managing-timezones-with-laravel/).
+
+
+
+
+
+## Add locales to PHP-FPM
+
+To add locales to the container:
+
+1 - Open the `.env` file and set `PHP_FPM_INSTALL_ADDITIONAL_LOCALES` to `true`.
+
+2 - Add locale codes to `PHP_FPM_ADDITIONAL_LOCALES`.
+
+3 - Re-build your PHP-FPM Container `docker-compose build php-fpm`.
+
+4 - Check enabled locales with `docker-compose exec php-fpm locale -a`
+
+Update the locale setting, default is `POSIX`
+
+1 - Open the `.env` file and set `PHP_FPM_DEFAULT_LOCALE` to `en_US.UTF8` or other locale you want.
+
+2 - Re-build your PHP-FPM Container `docker-compose build php-fpm`.
+
+3 - Check the default locale with `docker-compose exec php-fpm locale`
+
+
+
+
+## Adding cron jobs
+
+You can add your cron jobs to `workspace/crontab/root` after the `php artisan` line.
+
+```
+* * * * * laradock /usr/bin/php /var/www/artisan schedule:run >> /dev/null 2>&1
+
+# Custom cron
+* * * * * root echo "Every Minute" > /var/log/cron.log 2>&1
+```
+
+Make sure you [change the timezone](#Change-the-timezone) if you don't want to use the default (UTC).
+
+If you are on Windows, verify that the line endings for this file are LF only, otherwise the cron jobs will silently fail.
+
+
+
+
+
+
+
+
+## Access workspace via ssh
+
+You can access the `workspace` container through `localhost:2222` by setting the `INSTALL_WORKSPACE_SSH` build argument to `true`.
+
+To change the default forwarded port for ssh:
+
+```yml
+ workspace:
+ ports:
+ - "2222:22" # Edit this line
+ ...
+```
+
+Then login using:
+
+```bash
+ssh -o PasswordAuthentication=no \
+ -o StrictHostKeyChecking=no \
+ -o UserKnownHostsFile=/dev/null \
+ -p 2222 \
+ -i workspace/insecure_id_rsa \
+ laradock@localhost
+```
+
+To login as root, replace laradock@localhost with root@localhost.
+
+
+
+
+
+
+
+
+## Change the (MySQL) Version
+By default **MySQL 8.0** is running.
+
+MySQL 8.0 is a development release. You may prefer to use the latest stable version, or an even older release. If you wish, you can change the MySQL image that is used.
+
+Open up your .env file and set the `MYSQL_VERSION` variable to the version you would like to install.
+
+```
+MYSQL_VERSION=5.7
+```
+
+Available versions are: 5.5, 5.6, 5.7, 8.0, or latest. See https://store.docker.com/images/mysql for more information.
+
+
+
+
+
+
+
+
+## MySQL root access
+
+The default username and password for the root MySQL user are `root` and `root `.
+
+1 - Enter the MySQL container: `docker-compose exec mysql bash`.
+
+2 - Enter mysql: `mysql -uroot -proot` for non root access use `mysql -udefault -psecret`.
+
+3 - See all users: `SELECT User FROM mysql.user;`
+
+4 - Run any commands `show databases`, `show tables`, `select * from.....`.
+
+
+
+
+
+
+
+
+## Create Multiple Databases
+
+> With MySQL.
+
+Create `createdb.sql` from `mysql/docker-entrypoint-initdb.d/createdb.sql.example` in `mysql/docker-entrypoint-initdb.d/*` and add your SQL syntax as follow:
+
+```sql
+CREATE DATABASE IF NOT EXISTS `your_db_1` COLLATE 'utf8_general_ci' ;
+GRANT ALL ON `your_db_1`.* TO 'mysql_user'@'%' ;
+```
+
+
+
+
+
+
+
+
+## Change MySQL port
+
+Modify the `mysql/my.cnf` file to set your port number, `1234` is used as an example.
+
+```
+[mysqld]
+port=1234
+```
+
+If you need MySQL access from your host , do not forget to change the internal port number (`"3306:3306"` -> `"3306:1234"`) in the docker-compose configuration file.
+
+
+
+
+
+
+
+
+## Use custom Domain
+
+> How to use a custom domain, instead of the Docker IP.
+
+Assuming your custom domain is `laravel.test`
+
+1 - Open your `/etc/hosts` file and map your localhost address `127.0.0.1` to the `laravel.test` domain, by adding the following:
+
+```bash
+127.0.0.1 laravel.test
+```
+
+2 - Open your browser and visit `{http://laravel.test}`
+
+
+Optionally you can define the server name in the NGINX configuration file, like this:
+
+```conf
+server_name laravel.test;
+```
+
+
+
+
+
+
+
+
+## Global Composer Build Install
+
+Enabling Global Composer Install during the build for the container allows you to get your composer requirements installed and available in the container after the build is done.
+
+1 - Open the `.env` file
+
+2 - Search for the `WORKSPACE_COMPOSER_GLOBAL_INSTALL` argument under the Workspace Container and set it to `true`
+
+3 - Now add your dependencies to `workspace/composer.json`
+
+4 - Re-build the Workspace Container `docker-compose build workspace`
+
+
+
+
+
+
+
+
+## Add authentication for Magento
+
+> Adding authentication credentials for Magento 2.
+
+1 - Open the `.env` file
+
+2 - Search for the `WORKSPACE_COMPOSER_AUTH` argument under the Workspace Container and set it to `true`
+
+3 - Now add your credentials to `workspace/auth.json`
+
+4 - Re-build the Workspace Container `docker-compose build workspace`
+
+
+
+
+
+
+
+
+## Install Prestissimo
+
+[Prestissimo](https://github.com/hirak/prestissimo) is a plugin for composer which enables parallel install functionality.
+
+1 - Enable Running Global Composer Install during the Build:
+
+Click on this [Enable Global Composer Build Install](#Enable-Global-Composer-Build-Install) and do steps 1 and 2 only then continue here.
+
+2 - Add prestissimo as requirement in Composer:
+
+a - Now open the `workspace/composer.json` file
+
+b - Add `"hirak/prestissimo": "^0.3"` as requirement
+
+c - Re-build the Workspace Container `docker-compose build workspace`
+
+
+
+
+
+
+
+
+## Install Node + NVM
+
+To install NVM and NodeJS in the Workspace container
+
+1 - Open the `.env` file
+
+2 - Search for the `WORKSPACE_INSTALL_NODE` argument under the Workspace Container and set it to `true`
+
+3 - Re-build the container `docker-compose build workspace`
+
+A `.npmrc` file is included in the `workspace` folder if you need to utilise this globally. This is copied automatically into the root and laradock user's folders on build.
+
+
+
+
+## Install PNPM
+
+pnpm uses hard links and symlinks to save one version of a module only ever once on a disk. When using npm or Yarn for example, if you have 100 projects using the same version of lodash, you will have 100 copies of lodash on disk. With pnpm, lodash will be saved in a single place on the disk and a hard link will put it into the node_modules where it should be installed.
+
+As a result, you save gigabytes of space on your disk and you have a lot faster installations! If you'd like more details about the unique node_modules structure that pnpm creates and why it works fine with the Node.js ecosystem.
+More info here: https://pnpm.js.org/en/motivation
+
+1 - Open the `.env` file
+
+2 - Search for the `WORKSPACE_INSTALL_NODE` and `WORKSPACE_INSTALL_PNPM` argument under the Workspace Container and set it to `true`
+
+3 - Re-build the container `docker-compose build workspace`
+
+
+
+
+
+
+
+
+## Install Node + YARN
+
+Yarn is a new package manager for JavaScript. It is so faster than npm, which you can find [here](http://yarnpkg.com/en/compare).To install NodeJS and [Yarn](https://yarnpkg.com/) in the Workspace container:
+
+1 - Open the `.env` file
+
+2 - Search for the `WORKSPACE_INSTALL_NODE` and `WORKSPACE_INSTALL_YARN` argument under the Workspace Container and set it to `true`
+
+3 - Re-build the container `docker-compose build workspace`
+
+
+
+
+
+
+
+
+## Install NPM GULP toolkit
+
+To install NPM GULP toolkit in the Workspace container
+
+1 - Open the `.env` file
+
+2 - Search for the `WORKSPACE_INSTALL_NPM_GULP` argument under the Workspace Container and set it to `true`
+
+3 - Re-build the container `docker-compose build workspace`
+
+
+
+
+
+
+
+
+
+## Install NPM BOWER
+
+To install NPM BOWER package manager in the Workspace container
+
+1 - Open the `.env` file
+
+2 - Search for the `WORKSPACE_INSTALL_NPM_BOWER` argument under the Workspace Container and set it to `true`
+
+3 - Re-build the container `docker-compose build workspace`
+
+
+
+
+
+
+
+
+## Install NPM VUE CLI
+
+To install NPM VUE CLI in the Workspace container
+
+1 - Open the `.env` file
+
+2 - Search for the `WORKSPACE_INSTALL_NPM_VUE_CLI` argument under the Workspace Container and set it to `true`
+
+3 - Change `vue serve` port using `WORKSPACE_VUE_CLI_SERVE_HOST_PORT` if you wish to (default value is 8080)
+
+4 - Change `vue ui` port using `WORKSPACE_VUE_CLI_UI_HOST_PORT` if you wish to (default value is 8001)
+
+5 - Re-build the container `docker-compose build workspace`
+
+
+
+
+
+
+
+## Install NPM ANGULAR CLI
+
+To install NPM ANGULAR CLI in the Workspace container
+
+1 - Open the `.env` file
+
+2 - Search for the `WORKSPACE_INSTALL_NPM_ANGULAR_CLI` argument under the Workspace Container and set it to `true`
+
+3 - Re-build the container `docker-compose build workspace`
+
+
+
+
+
+
+
+
+## Install Linuxbrew
+
+Linuxbrew is a package manager for Linux. It is the Linux version of MacOS Homebrew and can be found [here](http://linuxbrew.sh). To install Linuxbrew in the Workspace container:
+
+1 - Open the `.env` file
+
+2 - Search for the `WORKSPACE_INSTALL_LINUXBREW` argument under the Workspace Container and set it to `true`
+
+3 - Re-build the container `docker-compose build workspace`
+
+
+
+
+
+
+
+## Install FFMPEG
+
+To install FFMPEG in the Workspace container
+
+1 - Open the `.env` file
+
+2 - Search for the `WORKSPACE_INSTALL_FFMPEG` argument under the Workspace Container and set it to `true`
+
+3 - Re-build the container `docker-compose build workspace`
+
+4 - If you use the `php-worker` container too, please follow the same steps above especially if you have conversions that have been queued.
+
+**PS** Don't forget to install the binary in the `php-fpm` container too by applying the same steps above to its container, otherwise you'll get an error when running the `php-ffmpeg` binary.
+
+
+
+
+## Install BBC Audio Waveform Image Generator
+
+audiowaveform is a C++ command-line application that generates waveform data from either MP3, WAV, FLAC, or Ogg Vorbis format audio files.
+Waveform data can be used to produce a visual rendering of the audio, similar in appearance to audio editing applications.
+Waveform data files are saved in either binary format (.dat) or JSON (.json).
+
+To install BBC Audio Waveform Image Generator in the Workspace container
+
+1 - Open the `.env` file
+
+2 - Search for the `WORKSPACE_INSTALL_AUDIOWAVEFORM` argument under the Workspace Container and set it to `true`
+
+3 - Re-build the container `docker-compose build workspace`
+
+4 - If you use the `php-worker` or `laravel-horizon` container too, please follow the same steps above especially if you have processing that have been queued.
+
+**PS** Don't forget to install the binary in the `php-fpm` container too by applying the same steps above to its container, otherwise you'll get an error when running the `audiowaveform` binary.
+
+
+
+
+## Install wkhtmltopdf
+
+[wkhtmltopdf](https://wkhtmltopdf.org/) is a utility for outputting a PDF from HTML
+
+To install wkhtmltopdf in the Workspace container
+
+1 - Open the `.env` file
+
+2 - Search for the `WORKSPACE_INSTALL_WKHTMLTOPDF` argument under the Workspace Container and set it to `true`
+
+3 - Re-build the container `docker-compose build workspace`
+
+**PS** Don't forget to install the binary in the `php-fpm` container too by applying the same steps above to its container, otherwise the you'll get an error when running the `wkhtmltopdf` binary.
+
+
+
+
+
+## Install GNU Parallel
+
+GNU Parallel is a command line tool to run multiple processes in parallel.
+
+(see https://www.gnu.org/software/parallel/parallel_tutorial.html)
+
+To install GNU Parallel in the Workspace container
+
+1 - Open the `.env` file
+
+2 - Search for the `WORKSPACE_INSTALL_GNU_PARALLEL` argument under the Workspace Container and set it to `true`
+
+3 - Re-build the container `docker-compose build workspace`
+
+
+
+
+
+
+
+
+## Install Supervisor
+
+Supervisor is a client/server system that allows its users to monitor and control a number of processes on UNIX-like operating systems.
+
+(see http://supervisord.org/index.html)
+
+To install Supervisor in the Workspace container
+
+1 - Open the `.env` file
+
+2 - Set `WORKSPACE_INSTALL_SUPERVISOR` and `WORKSPACE_INSTALL_PYTHON` to `true`.
+
+3 - Create supervisor configuration file (for ex., named `laravel-worker.conf`) for Laravel Queue Worker in `php-worker/supervisord.d/` by simply copy from `laravel-worker.conf.example`
+
+4 - Re-build the container `docker-compose build workspace` Or `docker-compose up --build -d workspace`
+
+
+
+
+
+
+
+
+
+## Common Terminal Aliases
+When you start your docker container, Laradock will copy the `aliases.sh` file located in the `laradock/workspace` directory and add sourcing to the container `~/.bashrc` file.
+
+You are free to modify the `aliases.sh` as you see fit, adding your own aliases (or function macros) to suit your requirements.
+
+
+
+
+
+
+
+
+## Install Aerospike extension
+
+1 - First install `aerospike` in the Workspace and the PHP-FPM Containers:
+
+a) open the `.env` file
+
+b) search for the `WORKSPACE_INSTALL_AEROSPIKE` argument under the Workspace Container
+
+c) set it to `true`
+
+d) search for the `PHP_FPM_INSTALL_AEROSPIKE` argument under the PHP-FPM Container
+
+e) set it to `true`
+
+
+2 - Re-build the containers `docker-compose build workspace php-fpm`
+
+
+
+
+
+
+
+
+## Install Laravel Envoy
+
+> A Tasks Runner.
+
+1 - Open the `.env` file
+
+2 - Search for the `WORKSPACE_INSTALL_LARAVEL_ENVOY` argument under the Workspace Container
+
+3 - Set it to `true`
+
+
+4 - Re-build the containers `docker-compose build workspace`
+
+[**Laravel Envoy Documentation Here**](https://laravel.com/docs/5.3/envoy)
+
+
+
+
+
+## Install php calendar extension
+
+1 - Open the `.env` file
+
+2 - Search for the `PHP_FPM_INSTALL_CALENDAR` argument under the PHP-FPM container
+
+3 - Set it to `true`
+
+4 - Re-build the containers `docker-compose build php-fpm`
+
+
+
+
+
+
+
+## Install libfaketime in php-fpm
+
+Libfaketime allows you to control the date and time that is returned from the operating system.
+It can be used by specifying a special string in the `PHP_FPM_FAKETIME` variable in the `.env` file.
+For example:
+`PHP_FPM_FAKETIME=-1d`
+will set the clock back 1 day. See (https://github.com/wolfcw/libfaketime) for more information.
+
+1 - Open the `.env` file
+
+2 - Search for the `PHP_FPM_INSTALL_FAKETIME` argument under the PHP-FPM container
+
+3 - Set it to `true`
+
+4 - Search for the `PHP_FPM_FAKETIME` argument under the PHP-FPM container
+
+5 - Set it to the desired string
+
+6 - Re-build the containers `docker-compose build php-fpm`
+
+
+
+
+
+
+## Install YAML extension in php-fpm
+
+YAML PHP extension allows you to easily parse and create YAML structured data. I like YAML because it's well readable for humans. See http://php.net/manual/en/ref.yaml.php and http://yaml.org/ for more info.
+
+1 - Open the `.env` file
+
+2 - Search for the `PHP_FPM_INSTALL_YAML` argument under the PHP-FPM container
+
+3 - Set it to `true`
+
+4 - Re-build the container `docker-compose build php-fpm`
+
+
+
+
+## Install RDKAFKA extension in php-fpm
+
+1 - Open the `.env` file
+
+2 - Search for the `PHP_FPM_INSTALL_RDKAFKA` argument under the PHP-FPM container
+
+3 - Set it to `true`
+
+4 - Re-build the container `docker-compose build php-fpm`
+
+
+
+
+## Install RDKAFKA extension in workspace
+
+This is needed for 'composer install' if your dependencies require Kafka.
+
+1 - Open the `.env` file
+
+2 - Search for the `WORKSPACE_INSTALL_RDKAFKA` argument under the WORKSPACE container
+
+3 - Set it to `true`
+
+4 - Re-build the container `docker-compose build workspace`
+
+
+
+
+## Install AST PHP extension
+AST exposes the abstract syntax tree generated by PHP 7+. This extension is required by tools such as `Phan`, a static analyzer for PHP.
+
+1 - Open the `.env` file
+
+2 - Search for the `WORKSPACE_INSTALL_AST` argument under the Workspace Container
+
+3 - Set it to `true`
+
+4 - Re-build the container `docker-compose build workspace`
+
+**Note** If you need a specific version of AST then search for the `WORKSPACE_AST_VERSION` argument under the Workspace Container and set it to the desired version and continue step 4.
+
+
+
+
+## Install PHP Decimal extension
+The PHP Decimal extension adds support for correctly-rounded, arbitrary-precision decimal floating point arithmetic. Applications that rely on accurate numbers (ie. money, measurements, or mathematics) can use Decimal instead of float or string to represent numerical values.
+
+For more information visit the [PHP Decimal website](https://php-decimal.io).
+
+2 - Search for the `WORKSPACE_INSTALL_PHPDECIMAL` argument under the Workspace Container
+
+2 - Search for the `PHP_FPM_INSTALL_PHPDECIMAL` argument under the PHP-FPM container
+
+3 - Set it to `true`
+
+4 - Re-build the container `docker-compose build workspace php-fpm`
+
+
+
+
+## Install Git Bash Prompt
+A bash prompt that displays information about the current git repository. In particular the branch name, difference with remote branch, number of files staged, changed, etc.
+
+1 - Open the `.env` file
+
+2 - Search for the `WORKSPACE_INSTALL_GIT_PROMPT` argument under the Workspace Container
+
+3 - Set it to `true`
+
+4 - Re-build the container `docker-compose build workspace`
+
+**Note** You can configure bash-git-prompt by editing the `workspace/gitprompt.sh` file and re-building the workspace container.
+For configuration information, visit the [bash-git-prompt repository](https://github.com/magicmonty/bash-git-prompt).
+
+
+
+## Install Oh My ZSH
+
+> With the Laravel autocomplete plugin.
+
+[Zsh](https://en.wikipedia.org/wiki/Z_shell) is an extended Bourne shell with many improvements, including some features of Bash, ksh, and tcsh.
+
+[Oh My Zsh](https://ohmyz.sh/) is a delightful, open source, community-driven framework for managing your Zsh configuration.
+
+[Laravel autocomplete plugin](https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/laravel) adds aliases and autocompletion for Laravel Artisan and Bob command-line interfaces.
+
+1 - Open the `.env` file
+
+2 - Search for the `SHELL_OH_MY_ZSH` argument under the Workspace Container
+
+3 - Set it to `true`
+
+4 - Re-build the container `docker-compose build workspace`
+
+5 - Use it `docker-compose exec --user=laradock workspace zsh`
+
+**Note** You can configure Oh My ZSH by editing the `/home/laradock/.zshrc` in running container.
+
+> With the ZSH autosuggestions plugin.
+
+[ZSH autosuggestions plugin](https://github.com/zsh-users/zsh-autosuggestions) suggests commands as you type based on history and completions.
+
+1 - Enable ZSH as described previously
+
+2 - Set `SHELL_OH_MY_ZSH_AUTOSUGESTIONS` to `true`
+
+3 - Rebuild and use ZSH as described previously
+
+> With bash aliases loaded.
+
+Laradock provides aliases through the `aliases.sh` file located in the `laradock/workspace` directory. You can load it into ZSH.
+
+1 - Enable ZSH as described previously
+
+2 - Set `SHELL_OH_MY_ZSH_ALIASES` to `true`
+
+3 - Rebuild and enjoy aliases
+
+
+
+## PHPStorm Debugging Guide
+Remote debug Laravel web and phpunit tests.
+
+[**Debugging Guide Here**](/guides/#PHPStorm-Debugging)
+
+
+
+
+
+## Setup Google Cloud
+
+> Setting up Google Cloud for the docker registry.
+
+```
+gcloud auth configure-docker
+```
+
+Login to gcloud for use the registry and auth the permission.
+
+```
+gcloud auth login
+```
+
+
+
+
+
+## Track your Laradock changes
+
+1. Fork the Laradock repository.
+2. Use that fork as a submodule.
+3. Commit all your changes to your fork.
+4. Pull new stuff from the main repository from time to time.
+
+
+
+
+
+
+
+
+
+
+
+
+## Improve speed on MacOS
+
+Docker on the Mac [is slow](https://github.com/docker/for-mac/issues/77), at the time of writing. Especially for larger projects, this can be a problem. The problem is [older than March 2016](https://forums.docker.com/t/file-access-in-mounted-volumes-extremely-slow-cpu-bound/8076) - as it's a such a long-running issue, we're including it in the docs here.
+
+So since sharing code into Docker containers with osxfs have very poor performance compared to Linux. Likely there are some workarounds:
+
+
+
+### Workaround A: using dinghy
+
+[Dinghy](https://github.com/codekitchen/dinghy) creates its own VM using docker-machine, it will not modify your existing docker-machine VMs.
+
+Quick Setup giude, (we recommend you check their docs)
+
+1) `brew tap codekitchen/dinghy`
+
+2) `brew install dinghy`
+
+3) `dinghy create --provider virtualbox` (must have virtualbox installed, but they support other providers if you prefer)
+
+4) after the above command is done it will display some env variables, copy them to the bash profile or zsh or.. (this will instruct docker to use the server running inside the VM)
+
+5) `docker-compose up ...`
+
+
+
+
+
+
+
+
+### Workaround B: using d4m-nfs
+
+You can use the d4m-nfs solution in 2 ways, the first is by using the built-in Laradock integration, and the second is using the tool separately. Below is show case of both methods:
+
+
+### B.1: using the built in d4m-nfs integration
+
+In simple terms, docker-sync creates a docker container with a copy of all the application files that can be accessed very quickly from the other containers.
+On the other hand, docker-sync runs a process on the host machine that continuously tracks and updates files changes from the host to this intermediate container.
+
+Out of the box, it comes pre-configured for OS X, but using it on Windows is very easy to set-up by modifying the `DOCKER_SYNC_STRATEGY` on the `.env`
+
+#### Usage
+
+Laradock comes with `sync.sh`, an optional bash script, that automates installing, running and stopping docker-sync. Note that to run the bash script you may need to change the permissions `chmod 755 sync.sh`
+
+1) Configure your Laradock environment as you would normally do and test your application to make sure that your sites are running correctly.
+
+2) Make sure to set `DOCKER_SYNC_STRATEGY` on the `.env`. Read the [syncing strategies](https://github.com/EugenMayer/docker-sync/wiki/8.-Strategies) for details.
+```
+# osx: 'native_osx' (default)
+# windows: 'unison'
+# linux: docker-sync not required
+
+DOCKER_SYNC_STRATEGY=native_osx
+```
+
+3) set `APP_CODE_CONTAINER_FLAG` to `APP_CODE_CONTAINER_FLAG=:nocopy` in the .env file
+
+4) Install the docker-sync gem on the host-machine:
+```bash
+./sync.sh install
+```
+5) Start docker-sync and the Laradock environment.
+Specify the services you want to run, as you would normally do with `docker-compose up`
+```bash
+./sync.sh up nginx mysql
+```
+Please note that the first time docker-sync runs, it will copy all the files to the intermediate container and that may take a very long time (15min+).
+6) To stop the environment and docker-sync do:
+```bash
+./sync.sh down
+```
+
+#### Setting up Aliases (optional)
+
+You may create bash profile aliases to avoid having to remember and type these commands for everyday development.
+Add the following lines to your `~/.bash_profile`:
+
+```bash
+alias devup="cd /PATH_TO_LARADOCK/laradock; ./sync.sh up nginx mysql" #add your services
+alias devbash="cd /PATH_TO_LARADOCK/laradock; ./sync.sh bash"
+alias devdown="cd /PATH_TO_LARADOCK/laradock; ./sync.sh down"
+```
+
+Now from any location on your machine, you can simply run `devup`, `devbash` and `devdown`.
+
+
+#### Additional Commands
+
+Opening bash on the workspace container (to run artisan for example):
+ ```bash
+ ./sync.sh bash
+ ```
+Manually triggering the synchronization of the files:
+```bash
+./sync.sh sync
+```
+Removing and cleaning up the files and the docker-sync container. Use only if you want to rebuild or remove docker-sync completely. The files on the host will be kept untouched.
+```bash
+./sync.sh clean
+```
+
+
+#### Additional Notes
+
+- You may run laradock with or without docker-sync at any time using with the same `.env` and `docker-compose.yml`, because the configuration is overridden automatically when docker-sync is used.
+- You may inspect the `sync.sh` script to learn each of the commands and even add custom ones.
+- If a container cannot access the files on docker-sync, you may need to set a user on the Dockerfile of that container with an id of 1000 (this is the UID that nginx and php-fpm have configured on laradock). Alternatively, you may change the permissions to 777, but this is **not** recommended.
+
+Visit the [docker-sync documentation](https://github.com/EugenMayer/docker-sync/wiki) for more details.
+
+
+
+
+
+
+
+
+### B.2: using the d4m-nfs tool
+
+[D4m-nfs](https://github.com/IFSight/d4m-nfs) automatically mount NFS volume instead of osxfs one.
+
+1) Update the Docker [File Sharing] preferences:
+
+Click on the Docker Icon > Preferences > (remove everything form the list except `/tmp`).
+
+2) Restart Docker.
+
+3) Clone the [d4m-nfs](https://github.com/IFSight/d4m-nfs) repository to your `home` directory.
+
+```bash
+git clone https://github.com/IFSight/d4m-nfs ~/d4m-nfs
+```
+
+4) Create (or edit) the file `~/d4m-nfs/etc/d4m-nfs-mounts.txt`, and write the following configuration in it:
+
+```txt
+/Users:/Users
+```
+
+5) Create (or edit) the file `/etc/exports`, make sure it exists and is empty. (There may be collisions if you come from Vagrant or if you already executed the `d4m-nfs.sh` script before).
+
+
+6) Run the `d4m-nfs.sh` script (might need Sudo):
+
+```bash
+~/d4m-nfs/d4m-nfs.sh
+```
+
+That's it! Run your containers.. Example:
+
+```bash
+docker-compose up ...
+```
+
+*Note: If you faced any errors, try restarting Docker, and make sure you have no spaces in the `d4m-nfs-mounts.txt` file, and your `/etc/exports` file is clear.*
+
+
+
+
+
+## Upgrade Laradock
+
+Moving from Docker Toolbox (VirtualBox) to Docker Native (for Mac/Windows). Requires upgrading Laradock from v3.* to v4.*:
+
+1. Stop the docker VM `docker-machine stop {default}`
+2. Install Docker for [Mac](https://docs.docker.com/docker-for-mac/) or [Windows](https://docs.docker.com/docker-for-windows/).
+3. Upgrade Laradock to `v4.*.*` (`git pull origin master`)
+4. Use Laradock as you used to do: `docker-compose up -d nginx mysql`.
+
+**Note:** If you face any problem with the last step above: rebuild all your containers
+`docker-compose build --no-cache`
+"Warning Containers Data might be lost!"
diff --git a/laradock/DOCUMENTATION/content/getting-started/index.md b/laradock/DOCUMENTATION/content/getting-started/index.md
new file mode 100644
index 000000000..a97c78c09
--- /dev/null
+++ b/laradock/DOCUMENTATION/content/getting-started/index.md
@@ -0,0 +1,238 @@
+---
+title: Getting Started
+type: index
+weight: 2
+---
+
+## Requirements
+
+- [Git](https://git-scm.com/downloads)
+- [Docker](https://www.docker.com/products/docker/) [ >= 17.12 ]
+
+
+
+
+## Installation
+
+Choose the setup the best suits your needs.
+
+- [A) Setup for Single Project](#A)
+ - [A.1) Already have a PHP project](#A1)
+ - [A.2) Don't have a PHP project yet](#A2)
+- [B) Setup for Multiple Projects](#B)
+
+
+
+### A) Setup for Single Project
+> (Follow these steps if you want a separate Docker environment for each project)
+
+
+
+### A.1) Already have a PHP project:
+
+1 - Clone laradock on your project root directory:
+
+```bash
+git submodule add https://github.com/Laradock/laradock.git
+```
+
+Note: If you are not using Git yet for your project, you can use `git clone` instead of `git submodule `.
+
+*To keep track of your Laradock changes, between your projects and also keep Laradock updated [check these docs](/documentation/#track-your-laradock-changes)*
+
+
+2 - Make sure your folder structure should look like this:
+
+```
+* project-a
+* laradock-a
+* project-b
+* laradock-b
+```
+
+*(It's important to rename the laradock folders to unique name in each project, if you want to run laradock per project).*
+
+3 - Go to the [Usage](#Usage) section.
+
+
+### A.2) Don't have a PHP project yet:
+
+1 - Clone this repository anywhere on your machine:
+
+```bash
+git clone https://github.com/laradock/laradock.git
+```
+
+Your folder structure should look like this:
+
+```
+* laradock
+* project-z
+```
+
+2 - Edit your web server sites configuration.
+
+We'll need to do step 1 of the [Usage](#Usage) section now to make this happen.
+
+```
+cp .env.example .env
+```
+
+At the top, change the `APP_CODE_PATH_HOST` variable to your project path.
+
+```
+APP_CODE_PATH_HOST=../project-z/
+```
+
+Make sure to replace `project-z` with your project folder name.
+
+3 - Go to the [Usage](#Usage) section.
+
+
+
+### B) Setup for Multiple Projects:
+> (Follow these steps if you want a single Docker environment for all your projects)
+
+1 - Clone this repository anywhere on your machine (similar to [Steps A.2. from above](#A2)):
+
+```bash
+git clone https://github.com/laradock/laradock.git
+```
+
+Your folder structure should look like this:
+
+```
+* laradock
+* project-1
+* project-2
+```
+
+Make sure the `APP_CODE_PATH_HOST` variable points to parent directory.
+
+```
+APP_CODE_PATH_HOST=../
+```
+
+2 - Go to your web server and create config files to point to different project directory when visiting different domains:
+
+For **Nginx** go to `nginx/sites`, for **Apache2** `apache2/sites`.
+
+Laradock by default includes some sample files for you to copy `app.conf.example`, `laravel.conf.example` and `symfony.conf.example`.
+
+3 - change the default names `*.conf`:
+
+You can rename the config files, project folders and domains as you like, just make sure the `root` in the config files, is pointing to the correct project folder name.
+
+4 - Add the domains to the **hosts** files.
+
+```
+127.0.0.1 project-1.test
+127.0.0.1 project-2.test
+...
+```
+
+If you use Chrome 63 or above for development, don't use `.dev`. [Why?](https://laravel-news.com/chrome-63-now-forces-dev-domains-https). Instead use `.localhost`, `.invalid`, `.test`, or `.example`.
+
+4 - Go to the [Usage](#Usage) section.
+
+
+
+
+
+
+
+
+## Usage
+
+**Read Before starting:**
+
+If you are using **Docker Toolbox** (VM), do one of the following:
+
+- Upgrade to Docker [Native](https://www.docker.com/products/docker) for Mac/Windows (Recommended). Check out [Upgrading Laradock](/documentation/#upgrading-laradock)
+- Use Laradock v3.\*. Visit the [Laradock-ToolBox](https://github.com/laradock/laradock/tree/LaraDock-ToolBox) branch. *(outdated)*
+
+
+
+We recommend using a Docker version which is newer than 1.13.
+
+
+
+>**Warning:** If you used an older version of Laradock it's highly recommended to rebuild the containers you need to use [see how you rebuild a container](/documentation/#Build-Re-build-Containers) in order to prevent as much errors as possible.
+
+
+
+1 - Enter the laradock folder and copy `.env.example` to `.env`
+
+```shell
+cp .env.example .env
+```
+
+You can edit the `.env` file to choose which software's you want to be installed in your environment. You can always refer to the `docker-compose.yml` file to see how those variables are being used.
+
+Depending on the host's operating system you may need to change the value given to `COMPOSE_FILE`. When you are running Laradock on Mac OS the correct file separator to use is `:`. When running Laradock from a Windows environment multiple files must be separated with `;`.
+
+By default the containers that will be created have the current directory name as suffix (e.g. `laradock_workspace_1`). This can cause mixture of data inside the container volumes if you use laradock in multiple projects. In this case, either read the guide for [multiple projects](#B) or change the variable `COMPOSE_PROJECT_NAME` to something unique like your project name.
+
+2 - Build the environment and run it using `docker-compose`
+
+In this example we'll see how to run NGINX (web server) and MySQL (database engine) to host a PHP Web Scripts:
+
+```bash
+docker-compose up -d nginx mysql
+```
+
+**Note**: All the web server containers `nginx`, `apache` ..etc depends on `php-fpm`, which means if you run any of them, they will automatically launch the `php-fpm` container for you, so no need to explicitly specify it in the `up` command. If you have to do so, you may need to run them as follows: `docker-compose up -d nginx php-fpm mysql`.
+
+
+You can select your own combination of containers from [this list](http://laradock.io/introduction/#supported-software-images).
+
+*(Please note that sometimes we forget to update the docs, so check the `docker-compose.yml` file to see an updated list of all available containers).*
+
+
+
+3 - Enter the Workspace container, to execute commands like (Artisan, Composer, PHPUnit, Gulp, ...)
+
+```bash
+docker-compose exec workspace bash
+```
+
+*Alternatively, for Windows PowerShell users: execute the following command to enter any running container:*
+
+```bash
+docker exec -it {workspace-container-id} bash
+```
+
+**Note:** You can add `--user=laradock` to have files created as your host's user. Example:
+
+```shell
+docker-compose exec --user=laradock workspace bash
+```
+
+*You can change the PUID (User id) and PGID (group id) variables from the `.env` file)*
+
+
+4 - Update your project configuration to use the database host
+
+Open your PHP project's `.env` file or whichever configuration file you are reading from, and set the database host `DB_HOST` to `mysql`:
+
+```env
+DB_HOST=mysql
+```
+
+You need to use the Laradock's default DB credentials which can be found in the `.env` file (ex: `MYSQL_USER=`).
+Or you can change them and rebuild the container.
+
+*If you want to install Laravel as PHP project, see [How to Install Laravel in a Docker Container](#Install-Laravel).*
+
+
+5 - Open your browser and visit your localhost address.
+
+Make sure you add use the right port number as provided by your running server.
+
+[http://localhost](http://localhost)
+
+If you followed the multiple projects setup, you can visit `http://project-1.test/` and `http://project-2.test/`.
+
+
+
+
diff --git a/laradock/DOCUMENTATION/content/help/index.md b/laradock/DOCUMENTATION/content/help/index.md
new file mode 100644
index 000000000..c10bb00ac
--- /dev/null
+++ b/laradock/DOCUMENTATION/content/help/index.md
@@ -0,0 +1,129 @@
+---
+title: Help & Questions
+type: index
+weight: 4
+---
+
+Join the chat room on [Gitter](https://gitter.im/Laradock/laradock) and get help and support from the community.
+
+[](https://gitter.im/Laradock/laradock?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
+
+You can as well can open an [issue](https://github.com/laradock/laradock/issues) on Github (will be labeled as Question) and discuss it with people on [Gitter](https://gitter.im/Laradock/laradock).
+
+
+
+
+# Common Problems
+
+*Here's a list of the common problems you might face, and the possible solutions.*
+
+
+
+## I see a blank (white) page instead of the Laravel 'Welcome' page!
+
+Run the following command from the Laravel root directory:
+
+```bash
+sudo chmod -R 777 storage bootstrap/cache
+```
+
+
+
+
+
+
+
+## I see "Welcome to nginx" instead of the Laravel App!
+
+Use `http://127.0.0.1` instead of `http://localhost` in your browser.
+
+
+
+
+
+
+
+## I see an error message containing (address already in use) or (port is already allocated)
+
+Make sure the ports for the services that you are trying to run (22, 80, 443, 3306, etc.) are not being used already by other programs on the host, such as a built in `apache`/`httpd` service or other development tools you have installed.
+
+
+
+
+
+
+
+## I get NGINX error 404 Not Found on Windows.
+
+1. Go to docker Settings on your Windows machine.
+2. Click on the `Shared Drives` tab and check the drive that contains your project files.
+3. Enter your windows username and password.
+4. Go to the `reset` tab and click restart docker.
+
+
+
+
+
+
+
+## The time in my services does not match the current time
+
+1. Make sure you've [changed the timezone](#Change-the-timezone).
+2. Stop and rebuild the containers (`docker-compose up -d --build `)
+
+
+
+
+
+
+
+## I get MySQL connection refused
+
+This error sometimes happens because your Laravel application isn't running on the container localhost IP (Which is 127.0.0.1). Steps to fix it:
+
+* Option A
+ 1. Check your running Laravel application IP by dumping `Request::ip()` variable using `dd(Request::ip())` anywhere on your application. The result is the IP of your Laravel container.
+ 2. Change the `DB_HOST` variable on env with the IP that you received from previous step.
+* Option B
+ 1. Change the `DB_HOST` value to the same name as the MySQL docker container. The Laradock docker-compose file currently has this as `mysql`
+
+## I get stuck when building nginx on (fetch mirrors.aliyun.com/alpine/v3.5/main/x86_64/APKINDEX.tar.gz)
+
+As stated on [#749](https://github.com/laradock/laradock/issues/749#issuecomment-419652646), Already fixed,just set `CHANGE_SOURCE` to false.
+
+## Custom composer repo packagist url and npm registry url
+
+In China, the origin source of composer and npm is very slow. You can add `WORKSPACE_NPM_REGISTRY` and `WORKSPACE_COMPOSER_REPO_PACKAGIST` config in `.env` to use your custom source.
+
+Example:
+```bash
+WORKSPACE_NPM_REGISTRY=https://registry.npmmirror.com
+WORKSPACE_COMPOSER_REPO_PACKAGIST=https://packagist.phpcomposer.com
+```
+
+
+
+## I got (Module build failed: Error: write EPIPE) while compiling react application
+
+When you run `npm build` or `yarn dev` building a react application using webpack with elixir you may receive an `Error: write EPIPE` while processing .jpg images.
+
+This is caused of an outdated library for processing **.jpg files** in ubuntu 16.04.
+
+To fix the problem you can follow those steps
+
+1 - Open the `.env`.
+
+2 - Search for `WORKSPACE_INSTALL_LIBPNG` or add the key, if missing.
+
+3 - Set the value to true:
+
+```dotenv
+WORKSPACE_INSTALL_LIBPNG=true
+```
+
+4 - Finally rebuild the workspace image
+
+```bash
+docker-compose build workspace
+```
+
diff --git a/laradock/DOCUMENTATION/content/introduction/index.md b/laradock/DOCUMENTATION/content/introduction/index.md
new file mode 100644
index 000000000..689ab442c
--- /dev/null
+++ b/laradock/DOCUMENTATION/content/introduction/index.md
@@ -0,0 +1,561 @@
+---
+title: Introduction
+type: index
+weight: 1
+---
+
+Laradock is a full PHP development environment for Docker.
+
+It supports a variety of common services, all pre-configured to provide a ready PHP development environment.
+
+
+
+---
+### Use Docker First - Learn About It Later!
+---
+
+
+## Features
+
+- Easy switch between PHP versions: 8.0, 7.4, 7.3, 7.2, 7.1, 5.6...
+- Choose your favorite database engine: MySQL, Postgres, MariaDB...
+- Run your own stack: Memcached, HHVM, RabbitMQ...
+- Each software runs on its own container: PHP-FPM, NGINX, PHP-CLI...
+- Easy to customize any container, with simple edits to the `Dockerfile`.
+- All Images extend from an official base Image. (Trusted base Images).
+- Pre-configured NGINX to host any code at your root directory.
+- Can use Laradock per project, or single Laradock for all projects.
+- Easy to install/remove software's in Containers using environment variables.
+- Clean and well-structured Dockerfiles (`Dockerfile`).
+- The Latest version of the Docker Compose file (`docker-compose`).
+- Everything is visible and editable.
+- Fast Images Builds.
+
+
+
+
+
+
+## Quick Overview
+
+Let's see how easy it is to setup our demo stack `PHP`, `NGINX`, `MySQL`, `Redis` and `Composer`:
+
+1 - Clone Laradock inside your PHP project:
+
+```shell
+git clone https://github.com/Laradock/laradock.git
+```
+
+2 - Enter the laradock folder and rename `.env.example` to `.env`.
+
+```shell
+cp .env.example .env
+```
+
+3 - Run your containers:
+
+```shell
+docker-compose up -d nginx mysql phpmyadmin redis workspace
+```
+
+4 - Open your project's `.env` file and set the following:
+
+```shell
+DB_HOST=mysql
+REDIS_HOST=redis
+QUEUE_HOST=beanstalkd
+```
+
+5 - Open your browser and visit localhost: `http://localhost`.
+
+```shell
+That's it! enjoy :)
+```
+
+
+
+
+
+## Supported Services
+
+> Laradock, adheres to the 'separation of concerns' principle, thus it runs each software on its own Docker Container.
+> You can turn On/Off as many instances as you want without worrying about the configurations.
+
+> To run a chosen container from the list below, run `docker-compose up -d {container-name}`.
+> The container name `{container-name}` is the same as its folder name. Example to run the "PHP FPM" container, use the name "php-fpm".
+
+- **Web Servers:**
+ - NGINX
+ - Apache2
+ - Caddy
+
+- **Load Balancers:**
+ - HAProxy
+ - Traefik
+
+- **PHP Compilers:**
+ - PHP FPM
+ - HHVM
+
+- **Database Management Systems:**
+ - MySQL
+ - PostgreSQL
+ - PostGIS
+ - MariaDB
+ - Percona
+ - MSSQL
+ - MongoDB
+ - MongoDB Web UI
+ - Neo4j
+ - CouchDB
+ - RethinkDB
+ - Cassandra
+
+
+- **Database Management Apps:**
+ - PhpMyAdmin
+ - Adminer
+ - PgAdmin
+
+- **Cache Engines:**
+ - Redis
+ - Redis Web UI
+ - Redis Cluster
+ - Memcached
+ - Aerospike
+ - Varnish
+
+- **Message Brokers:**
+ - RabbitMQ
+ - RabbitMQ Admin Console
+ - Beanstalkd
+ - Beanstalkd Admin Console
+ - Eclipse Mosquitto
+ - PHP Worker
+ - Laravel Horizon
+ - Gearman
+ - Amazon Simple Queue Service
+
+- **Mail Servers:**
+ - Mailu
+ - MailCatcher
+ - Mailhog
+ - MailDev
+
+- **Log Management:**
+ - GrayLog
+
+- **Testing:**
+ - Selenium
+
+- **Monitoring:**
+ - Grafana
+ - NetData
+
+- **Search Engines:**
+ - ElasticSearch
+ - Apache Solr
+ - Manticore Search
+
+- **IDE's**
+ - ICE Coder
+ - Theia
+ - Web IDE
+
+- **Miscellaneous:**
+ - Workspace *(Laradock container that includes a rich set of pre-configured useful tools)*
+ - `PHP CLI`
+ - `Composer`
+ - `Git`
+ - `Vim`
+ - `xDebug`
+ - `Linuxbrew`
+ - `Node`
+ - `V8JS`
+ - `Gulp`
+ - `SQLite`
+ - `Laravel Envoy`
+ - `Deployer`
+ - `Yarn`
+ - `SOAP`
+ - `Drush`
+ - `Wordpress CLI`
+ - Apache ZooKeeper *(Centralized service for distributed systems to a hierarchical key-value store)*
+ - Kibana *(Visualize your Elasticsearch data and navigate the Elastic Stack)*
+ - Dejavu *(Edit your Elasticsearch data)*
+ - LogStash *(Server-side data processing pipeline that ingests data from a multitude of sources simultaneously)*
+ - Jenkins *(automation server, that provides plugins to support building, deploying and automating any project)*
+ - Certbot *(Automatically enable HTTPS on your website)*
+ - Swoole *(Production-Grade Async programming Framework for PHP)*
+ - SonarQube *(continuous inspection of code quality to perform automatic reviews with static analysis of code to detect bugs and more)*
+ - Gitlab *(A single application for the entire software development lifecycle)*
+ - PostGIS *(Database extender for PostgreSQL. It adds support for geographic objects allowing location queries to be run in SQL)*
+ - Blackfire *(Empowers all PHP developers and IT/Ops to continuously verify and improve their app's performance)*
+ - Laravel Echo *(Bring the power of WebSockets to your Laravel applications)*
+ - Mercure *(Server-sent events)*
+ - Phalcon *(A PHP web framework based on the model–view–controller pattern)*
+ - Minio *(Cloud storage server released under Apache License v2, compatible with Amazon S3)*
+ - AWS EB CLI *(CLI that helps you deploy and manage your AWS Elastic Beanstalk applications and environments)*
+ - Thumbor *(Photo thumbnail service)*
+ - IPython *(Provides a rich architecture for interactive computing)*
+ - Jupyter Hub *(Jupyter notebook for multiple users)*
+ - Portainer *(Build and manage your Docker environments with ease)*
+ - Docker Registry *(The Docker Registry implementation for storing and distributing Docker images)*
+ - Docker Web UI *(A browser-based solution for browsing and modifying a private Docker registry)*
+
+You can choose, which tools to install in your workspace container and other containers, from the `.env` file.
+
+
+> If you modify `docker-compose.yml`, `.env` or any `dockerfile` file, you must re-build your containers, to see those effects in the running instance.
+
+
+
+*If you can't find your Software in the list, build it yourself and submit it. Contributions are welcomed :)*
+
+---
+
+
+
+
+
+
+
+
+
+
+## Join Us
+
+[](https://gitter.im/Laradock/laradock?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
+
+[](https://gitpod.io/#https://github.com/laradock/laradock)
+
+---
+
+
+## Awesome People
+
+Laradock is an MIT-licensed open source project with its ongoing development made possible entirely by the support of all these smart and generous people, from code contributors to financial contributors. 💜
+
+
+### Project Maintainers
+
+
+
+### Code Contributors
+
+[![Laradock Contributors][contributors-src]][contributors-href]
+
+### Financial Contributors
+
+[![Open Collective backers][backers-src]][backers-href]
+
+You can support us using any of the methods below:
+
+1: [Open Collective](https://opencollective.com/laradock)
+
+2: [Paypal](https://paypal.me/mzmmzz)
+
+3: [Github Sponsors](https://github.com/sponsors/Mahmoudz)
+
+4: [Patreon](https://www.patreon.com/zalt)
+
+---
+
+
+## Sponsors
+
+Sponsoring is an act of giving in a different fashion. 🌱
+
+
+### Gold Sponsors
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+### Silver Sponsors
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+### Bronze Sponsors
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+You can sponsor us using any of the methods below:
+
+1: Sponsor via [Open Collective](https://opencollective.com/laradock/).
+
+2: Email us at support@laradock.io .
+
+*Sponsors logos are displayed on the [github repository](https://github.com/laradock/laradock/) page and the [documentation website](http://laradock.io/) home page.*
+
+## License
+
+[MIT](https://github.com/laradock/laradock/blob/master/LICENSE) © Mahmoud Zalt
+
+
+[comment]: # (Open Collective Tiers)
+
+[contributors-src]: https://opencollective.com/laradock/contributors.svg?width=890&button=false&isActive=true
+[contributors-href]: https://github.com/laradock/laradock/graphs/contributors
+[backers-src]: https://opencollective.com/laradock/tiers/awesome-backers.svg?width=890&button=false&isActive=true
+[backers-href]: https://opencollective.com/laradock#contributors
+
+[gold-sponsors-src]: https://opencollective.com/laradock/tiers/gold-sponsors.svg?avatarHeight=80&width=890&button=false&isActive=true
+[gold-sponsors-href]: https://opencollective.com/laradock#contributors
+[silver-sponsors-src]: https://opencollective.com/laradock/tiers/silver-sponsors.svg?avatarHeight=64&width=890&button=false&isActive=true
+[silver-sponsors-href]: https://opencollective.com/laradock#contributors
+[bronze-sponsors-src]: https://opencollective.com/laradock/tiers/bronze-sponsors.svg?avatarHeight=48&width=890&button=false&isActive=true
+[bronze-sponsors-href]: https://opencollective.com/laradock#contributors
+
+
+
+
+
+
+
+
+
diff --git a/laradock/DOCUMENTATION/content/related-projects/index.md b/laradock/DOCUMENTATION/content/related-projects/index.md
new file mode 100644
index 000000000..f99420527
--- /dev/null
+++ b/laradock/DOCUMENTATION/content/related-projects/index.md
@@ -0,0 +1,49 @@
+---
+title: Related Projects
+type: index
+weight: 5
+---
+
+## Laradock Related Projects
+
+
+* [Docker Stacks](https://github.com/sfx101/docker-stacks): A GUI for managing Laradock. (by [Subhadip Naskar](https://github.com/sfx101))
+* [Laradock CLI](https://github.com/lorinlee/laradock-cli): A CLI for managing Laradock. (by [Lorin Lee](https://github.com/lorinlee))
+* [Laradock CLI](https://github.com/loonpwn/laradock-cli): A CLI for managing Laradock. (by [Harlan Wilton](https://github.com/loonpwn))
+* [Ansible Laradock Kubernetes](https://github.com/sifat-rahim/ansible-laradock-kubernetes): Ansible playbook to setup docker containers for Laravel apps using Laradock. (by [Sifat Rahim](https://github.com/sifat-rahim))
+* [Monitor Laradock](https://github.com/zeroc0d3/monitor-laradock): Laradock Monitoring Tools (using Grafana). (by [Dwi Fahni Denni](https://github.com/zeroc0d3))
+* [Laradock Manager](https://github.com/Lyimmi/laradock-manager): A simple app for managing Laradock containers. Made with wails.app (go & vue.js & vuetify). (by [Zámbó Levente](https://github.com/Lyimmi))
+* [Laradock Env](https://github.com/bagart/laradock_env): A wrapper with commands for managing Laradock. (by [BAG Art](https://github.com/bagart))
+* [Lara Query](https://github.com/TanisukeGoro/laraQuery): Easy Laradock CLI. (by [Okita kamegoro](https://github.com/TanisukeGoro))
+* [Laradock CLI](https://github.com/tonysm/laradock-cli): Laradock CLI helper. (by [Tony Messias](https://github.com/Tonysm))
+* [Laradock Lite](https://github.com/yangliuyu/laradock-lite): A Docker based laravel development environment with minimal dependencies. (by [Liu Yang](https://github.com/yangliuyu))
+* [Laradock Makefile](https://github.com/bazavlukd/laradock-makefile): Makefile with some useful commands for Laradock. (by [Dmitry Bazavluk](https://github.com/bazavlukd))
+* [Laradock Build](https://github.com/dockerframework/laradock-build): Docker builder & running script for Laradock. (by [Docker Framework](https://github.com/dockerframework))
+* [Laravel Laradock PHPStorm](https://github.com/LarryEitel/laravel-laradock-phpstorm): Guide for configuring PHPStorm for remote debugging with Laravel & Laradock. (by [Larry Eitel](https://github.com/LarryEitel))
+* [Laradock Crudbooster](https://github.com/nutellinoit/laradock-crudbooster): Docker compose & Kubernetes solution to build apps with crudbooster & Laradock. (by [Samuele Chiocca](https://github.com/nutellinoit))
+* [Laradock Sample](https://github.com/tadaken3/laradock-sample): Install Laravel with Laradock. (by [Tadaken3](https://github.com/tadaken3))
+* [Stylemix's Laradock](https://github.com/stylemix/laradock): Alternate laradock for multiproject purpose. (by [Stylemix LLC](https://github.com/stylemix))
+
+
+
+
+## Inspired by Laradock
+
+* [Dockery](https://github.com/taufek/dockery): Laradock for Ruby. (by [Taufek Johar](https://github.com/Taufek))
+* [RubyDev Dock](https://github.com/scudelletti/rubydev-dock): Laradock for Ruby. (by [Diogo Scudelletti](https://github.com/scudelletti))
+* [NoDock](https://github.com/Osedea/nodock): Laradock for NodeJS. (by [Osedea](https://github.com/Osedea))
+* [Laradock Multi](https://github.com/bagart/laradock-multi): Laradock for PHP & NodeJS. (by [BAG Art](https://github.com/bagart))
+* [Wordpress Laradock](https://github.com/shov/wordpress-laradock): Laradock for Wordpress. (by [Alexandr Shevchenko](https://github.com/shov))
+* [Yii2 Laradock](https://github.com/ydatech/yii2-laradock): Laradock for Yii2. (by [Yuda Sukmana](https://github.com/ydatech))
+* [MageDock](https://github.com/ojhaujjwal/magedock): Laradock for Magento. (by [Ujjwal Ojha](https://github.com/ojhaujjwal))
+* [Docker Codeigniter](https://github.com/sebastianlzy/docker-codeigniter): Laradock for Codeigniter. (by [Sebastian](https://github.com/sebastianlzy))
+* [Klaradock](https://github.com/poyhsiao/Klaradock): A customized Laradock. (by [Kim Hsiao](https://github.com/poyhsiao))
+* [Laravel Boilerplate](https://github.com/casivaagustin/laravel-boilerplate): A boilerplate with support for JWT. (by [Casiva Agustin](https://github.com/casivaagustin))
+
+
+
+
+
+
+
+> Feel free to submit a PR for listing your project here.
diff --git a/laradock/DOCUMENTATION/static/CNAME b/laradock/DOCUMENTATION/static/CNAME
new file mode 100644
index 000000000..df75fb6b8
--- /dev/null
+++ b/laradock/DOCUMENTATION/static/CNAME
@@ -0,0 +1 @@
+laradock.io
\ No newline at end of file
diff --git a/laradock/DOCUMENTATION/static/ads.txt b/laradock/DOCUMENTATION/static/ads.txt
new file mode 100644
index 000000000..223019656
--- /dev/null
+++ b/laradock/DOCUMENTATION/static/ads.txt
@@ -0,0 +1 @@
+google.com, pub-9826129398689742, DIRECT, f08c47fec0942fa0
diff --git a/laradock/DOCUMENTATION/static/custom-style.css b/laradock/DOCUMENTATION/static/custom-style.css
new file mode 100644
index 000000000..d25a5ac14
--- /dev/null
+++ b/laradock/DOCUMENTATION/static/custom-style.css
@@ -0,0 +1,30 @@
+/* Custom CSS */
+
+.article a {
+ border-bottom: none;
+}
+.project .logo {
+ width: 200px;
+ padding-right: 0;
+}
+.project .banner {
+ height: 70px;
+ padding: 25px;
+}
+.palette-primary-deep-purple .article h1{
+ color: #7e57c2;
+ font-size: 35px;
+}
+.palette-primary-deep-purple .article h2{
+
+ color: #ce2046;
+ font-size: 25px;
+}
+.palette-primary-deep-purple .article h3{
+ color: #851d54;
+ font-size: 18px;
+}
+.palette-primary-deep-purple .article code{
+ color: #851d54;
+ background: #eeeeeea8;
+}
diff --git a/laradock/DOCUMENTATION/themes/hugo-material-docs/CHANGELOG.md b/laradock/DOCUMENTATION/themes/hugo-material-docs/CHANGELOG.md
new file mode 100644
index 000000000..04cec42d1
--- /dev/null
+++ b/laradock/DOCUMENTATION/themes/hugo-material-docs/CHANGELOG.md
@@ -0,0 +1,29 @@
+# Changelog
+
+
+### 11th May 2016
+
+#### Add templates for section lists
+
+Sections such as www.example.com/foo/ will now be rendered with a list of all pages that are part of this section. The list shows the pages' title and a summary of their content.
+
+[Show me the diff](https://github.com/digitalcraftsman/hugo-material-docs/commit/1f8393a8d4ce1b8ee3fc7d87be05895c12810494)
+
+### 22nd March 2016
+
+#### Changing setup for Google Analytics
+
+Formerly, the tracking id for Google Analytics was set like below:
+
+```toml
+[params]
+ google_analytics = ["UA-XXXXXXXX-X", "auto"]
+```
+
+Now the theme uses Hugo's own Google Analytics config option. The variable moved outside the scope of `params` and the setup requires only the tracking id as a string:
+
+```toml
+googleAnalytics = "UA-XXXXXXXX-X"
+```
+
+[Show me the diff](https://github.com/digitalcraftsman/hugo-material-docs/commit/fa10c8eef935932426d46b662a51f29a5e0d48e2)
\ No newline at end of file
diff --git a/laradock/DOCUMENTATION/themes/hugo-material-docs/LICENSE.md b/laradock/DOCUMENTATION/themes/hugo-material-docs/LICENSE.md
new file mode 100644
index 000000000..1a5879b3b
--- /dev/null
+++ b/laradock/DOCUMENTATION/themes/hugo-material-docs/LICENSE.md
@@ -0,0 +1,20 @@
+Copyright (c) 2016 Digitalcraftsman
+Copyright (c) 2016 Martin Donath
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to
+deal in the Software without restriction, including without limitation the
+rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+sell copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+IN THE SOFTWARE.
\ No newline at end of file
diff --git a/laradock/DOCUMENTATION/themes/hugo-material-docs/README.md b/laradock/DOCUMENTATION/themes/hugo-material-docs/README.md
new file mode 100644
index 000000000..efcc807de
--- /dev/null
+++ b/laradock/DOCUMENTATION/themes/hugo-material-docs/README.md
@@ -0,0 +1,40 @@
+# Material Docs
+
+A material design theme for [Hugo](https://gohugo.io).
+
+[](https://digitalcraftsman.github.io/hugo-material-docs/)
+
+## Quick start
+
+Install with `git`:
+
+
+ git clone https://github.com/digitalcraftsman/hugo-material-docs.git themes/hugo-material-docs
+
+
+Next, take a look in the `exampleSite` folder at. This directory contains an example config file and the content for the demo. It serves as an example setup for your documentation.
+
+Copy at least the `config.toml` in the root directory of your website. Overwrite the existing config file if necessary.
+
+Hugo includes a development server, so you can view your changes as you go -
+very handy. Spin it up with the following command:
+
+``` sh
+hugo server
+```
+
+Now you can go to [localhost:1313](http://localhost:1313) and the Material
+theme should be visible. For detailed installation instructions visit the [demo](http://themes.gohugo.io/theme/material-docs/).
+
+Noteworthy changes of this theme are listed in the [changelog](https://github.com/digitalcraftsman/hugo-material-docs/blob/master/CHANGELOG.md).
+
+## Acknowledgements
+
+A big thank you to [Martin Donath](https://github.com/squidfunk). He created the original [Material theme](https://github.com/squidfunk/mkdocs-material) for Hugo's companion [MkDocs](http://www.mkdocs.org/). This port wouldn't be possible without him.
+
+Furthermore, thanks to [Steve Francia](https://gihub.com/spf13) for creating Hugo and the [awesome community](https://github.com/spf13/hugo/graphs/contributors) around the project.
+
+## License
+
+The theme is released under the MIT license. Read the [license](https://github.com/digitalcraftsman/hugo-material-docs/blob/master/LICENSE.md) for more information.
+
diff --git a/laradock/DOCUMENTATION/themes/hugo-material-docs/archetypes/default.md b/laradock/DOCUMENTATION/themes/hugo-material-docs/archetypes/default.md
new file mode 100644
index 000000000..a49ba4844
--- /dev/null
+++ b/laradock/DOCUMENTATION/themes/hugo-material-docs/archetypes/default.md
@@ -0,0 +1,2 @@
+---
+---
\ No newline at end of file
diff --git a/laradock/DOCUMENTATION/themes/hugo-material-docs/layouts/404.html b/laradock/DOCUMENTATION/themes/hugo-material-docs/layouts/404.html
new file mode 100644
index 000000000..e69de29bb
diff --git a/laradock/DOCUMENTATION/themes/hugo-material-docs/layouts/_default/__list.html b/laradock/DOCUMENTATION/themes/hugo-material-docs/layouts/_default/__list.html
new file mode 100644
index 000000000..fb1046a4a
--- /dev/null
+++ b/laradock/DOCUMENTATION/themes/hugo-material-docs/layouts/_default/__list.html
@@ -0,0 +1,58 @@
+{{ partial "head" . }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ partial "drawer" . }}
+
+
+
+
+
Pages in {{ .Title | singularize }}
+
+ {{ range .Data.Pages }}
+
+ {{ .Title }}
+
+
+
+ {{ printf "%s" .Summary | markdownify }}
+
+
+ {{ end }}
+
+
+ {{ with .Site.Params.copyright }}
+ © {{ $.Now.Format "2006" }} {{ . }} –
+ {{ end }}
+
+ Documentation built with
+ Hugo
+ using the
+ Material theme.
+
+
+
+
+
+
+
+{{ partial "footer_js" . }}
diff --git a/laradock/DOCUMENTATION/themes/hugo-material-docs/layouts/_default/single.html b/laradock/DOCUMENTATION/themes/hugo-material-docs/layouts/_default/single.html
new file mode 100644
index 000000000..83cf3ee3b
--- /dev/null
+++ b/laradock/DOCUMENTATION/themes/hugo-material-docs/layouts/_default/single.html
@@ -0,0 +1,58 @@
+{{ partial "head" . }}
+
+{{ if (eq (trim .Site.Params.provider " " | lower) "github") | and (isset .Site.Params "repo_url") }}
+ {{ $repo_id := replace .Site.Params.repo_url "https://github.com/" ""}}
+ {{ .Scratch.Set "repo_id" $repo_id }}
+{{ end }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ partial "drawer" . }}
+
+
+
+
+
{{ .Title }} {{ if .IsDraft }} (Draft){{ end }}
+
+ {{ .Content }}
+
+
+ {{ with .Site.Params.copyright }}
+ © {{ $.Now.Format "2006" }} {{ . }} –
+ {{ end }}
+
+ Documentation built with
+ Hugo
+ using the
+ Material theme.
+
+
+
+
+
+
+
+
+
+{{ partial "footer_js" . }}
diff --git a/laradock/DOCUMENTATION/themes/hugo-material-docs/layouts/index.html b/laradock/DOCUMENTATION/themes/hugo-material-docs/layouts/index.html
new file mode 100644
index 000000000..c09a68bfb
--- /dev/null
+++ b/laradock/DOCUMENTATION/themes/hugo-material-docs/layouts/index.html
@@ -0,0 +1,82 @@
+{{ partial "head" . }}
+
+{{ if (eq (trim .Site.Params.provider " " | lower) "github") | and (isset .Site.Params "repo_url") }}
+ {{ $repo_id := replace .Site.Params.repo_url "https://github.com/" ""}}
+ {{ .Scratch.Set "repo_id" $repo_id }}
+{{ end }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ partial "drawer" . }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ range where .Site.Pages "Type" "index" }}
+
+
+
+
{{ .Title }} {{ if .IsDraft }} (Draft){{ end }}
+
+ {{ .Content }}
+ {{ end }}
+
+
+ {{ with .Site.Params.copyright }}
+ © {{ $.Now.Format "2006" }} {{ . }} –
+ {{ end }}
+
+ Documentation built with
+ Hugo
+ using the
+ Material theme,
+ by
+ Mahmoud Zalt .
+
+
+
+
+
+
+
+
+
+{{ partial "footer_js" . }}
diff --git a/laradock/DOCUMENTATION/themes/hugo-material-docs/layouts/partials/drawer.html b/laradock/DOCUMENTATION/themes/hugo-material-docs/layouts/partials/drawer.html
new file mode 100644
index 000000000..7fd69c9ca
--- /dev/null
+++ b/laradock/DOCUMENTATION/themes/hugo-material-docs/layouts/partials/drawer.html
@@ -0,0 +1,101 @@
+
+
+
+ {{ with .Site.Params.logo }}
+
+
+
+
+ {{ end }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/laradock/DOCUMENTATION/themes/hugo-material-docs/layouts/partials/footer.html b/laradock/DOCUMENTATION/themes/hugo-material-docs/layouts/partials/footer.html
new file mode 100644
index 000000000..c0017542f
--- /dev/null
+++ b/laradock/DOCUMENTATION/themes/hugo-material-docs/layouts/partials/footer.html
@@ -0,0 +1,74 @@
+{{ if .IsPage }}
+{{ if .Prev | or .Next }}
+
+{{ end }}
+{{ end }}
+
+{{ if .IsHome }}
+{{ if gt (len .Site.Pages) 2 }}
+
+{{ end }}
+{{ end }}
diff --git a/laradock/DOCUMENTATION/themes/hugo-material-docs/layouts/partials/footer_js.html b/laradock/DOCUMENTATION/themes/hugo-material-docs/layouts/partials/footer_js.html
new file mode 100644
index 000000000..8b0b55e83
--- /dev/null
+++ b/laradock/DOCUMENTATION/themes/hugo-material-docs/layouts/partials/footer_js.html
@@ -0,0 +1,91 @@
+
+
+
+ {{ range .Site.Params.custom_js }}
+
+ {{ end }}
+
+
+
+ {{ with .Site.GoogleAnalytics }}
+
+ {{ end }}
+
+
+
+