diff --git a/composer.json b/composer.json index f4405e8..471f8be 100644 --- a/composer.json +++ b/composer.json @@ -17,23 +17,24 @@ ], "require": { "php" : ">=7.1.0", - "illuminate/http": "^5.7|^5.8", - "illuminate/database": "^5.7|^5.8", - "illuminate/support": "^5.7|^5.8", - "padosoft/io": "^1.0", - "padosoft/laravel-request": "^2.0|^3.0", + "illuminate/http": "^5.7|^5.8|^6.0|^7.0", + "illuminate/database": "^5.7|^5.8|^6.0|^7.0", + "illuminate/support": "^5.7|^5.8|^6.0|^7.0", "padosoft/support": "^1.6|^2.1" }, "require-dev": { - "orchestra/testbench": "^3.7|^3.8", - "phpunit/phpunit": "^7.0|^8.0", + "orchestra/testbench": "^3.7|^3.8|^4.0|^5.0", + "phpunit/phpunit": "^7.0|^8.0|^9.0", "mockery/mockery": "^1.0", - "padosoft/test": "^1.0.1" + "padosoft/test": "^1.0.1|^2.0" }, "autoload": { "psr-4": { "Padosoft\\Uploadable\\": "src" - } + }, + "files": [ + "src/helpers.php" + ] }, "autoload-dev": { "psr-4": { diff --git a/composer.lock b/composer.lock index 93f0f28..5db9310 100644 --- a/composer.lock +++ b/composer.lock @@ -1,23 +1,68 @@ { "_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#composer-lock-the-lock-file", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "92efe88edfcbf303056d4c157075abaf", + "content-hash": "d9e730a69d6aaeb1e4f521d33119ad06", "packages": [ + { + "name": "brick/math", + "version": "0.8.14", + "source": { + "type": "git", + "url": "https://github.com/brick/math.git", + "reference": "6f7a46b5c3d487b277f38fbd17df57d348cace8a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/brick/math/zipball/6f7a46b5c3d487b277f38fbd17df57d348cace8a", + "reference": "6f7a46b5c3d487b277f38fbd17df57d348cace8a", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "require-dev": { + "php-coveralls/php-coveralls": "2.*", + "phpunit/phpunit": "7.*", + "vimeo/psalm": "3.*" + }, + "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" + ], + "time": "2020-02-17T13:57:43+00:00" + }, { "name": "doctrine/inflector", - "version": "v1.3.0", + "version": "1.3.1", "source": { "type": "git", "url": "https://github.com/doctrine/inflector.git", - "reference": "5527a48b7313d15261292c149e55e26eae771b0a" + "reference": "ec3a55242203ffa6a4b27c58176da97ff0a7aec1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/5527a48b7313d15261292c149e55e26eae771b0a", - "reference": "5527a48b7313d15261292c149e55e26eae771b0a", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/ec3a55242203ffa6a4b27c58176da97ff0a7aec1", + "reference": "ec3a55242203ffa6a4b27c58176da97ff0a7aec1", "shasum": "" }, "require": { @@ -42,6 +87,10 @@ "MIT" ], "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, { "name": "Roman Borschel", "email": "roman@code-factory.org" @@ -50,10 +99,6 @@ "name": "Benjamin Eberlei", "email": "kontakt@beberlei.de" }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, { "name": "Jonathan Wage", "email": "jonwage@gmail.com" @@ -71,32 +116,34 @@ "singularize", "string" ], - "time": "2018-01-09T20:05:19+00:00" + "time": "2019-10-30T19:59:35+00:00" }, { "name": "doctrine/lexer", - "version": "1.0.2", + "version": "1.2.0", "source": { "type": "git", "url": "https://github.com/doctrine/lexer.git", - "reference": "1febd6c3ef84253d7c815bed85fc622ad207a9f8" + "reference": "5242d66dbeb21a30dd8a3e66bf7a73b66e05e1f6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/1febd6c3ef84253d7c815bed85fc622ad207a9f8", - "reference": "1febd6c3ef84253d7c815bed85fc622ad207a9f8", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/5242d66dbeb21a30dd8a3e66bf7a73b66e05e1f6", + "reference": "5242d66dbeb21a30dd8a3e66bf7a73b66e05e1f6", "shasum": "" }, "require": { - "php": ">=5.3.2" + "php": "^7.2" }, "require-dev": { - "phpunit/phpunit": "^4.5" + "doctrine/coding-standard": "^6.0", + "phpstan/phpstan": "^0.11.8", + "phpunit/phpunit": "^8.2" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.2.x-dev" } }, "autoload": { @@ -109,14 +156,14 @@ "MIT" ], "authors": [ - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, { "name": "Guilherme Blanco", "email": "guilhermeblanco@gmail.com" }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, { "name": "Johannes Schmitt", "email": "schmittjoh@gmail.com" @@ -131,7 +178,7 @@ "parser", "php" ], - "time": "2019-06-08T11:03:04+00:00" + "time": "2019-10-30T14:39:59+00:00" }, { "name": "dragonmantank/cron-expression", @@ -189,25 +236,26 @@ }, { "name": "egulias/email-validator", - "version": "2.1.9", + "version": "2.1.17", "source": { "type": "git", "url": "https://github.com/egulias/EmailValidator.git", - "reference": "128cc721d771ec2c46ce59698f4ca42b73f71b25" + "reference": "ade6887fd9bd74177769645ab5c474824f8a418a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/128cc721d771ec2c46ce59698f4ca42b73f71b25", - "reference": "128cc721d771ec2c46ce59698f4ca42b73f71b25", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/ade6887fd9bd74177769645ab5c474824f8a418a", + "reference": "ade6887fd9bd74177769645ab5c474824f8a418a", "shasum": "" }, "require": { "doctrine/lexer": "^1.0.1", - "php": ">= 5.5" + "php": ">=5.5", + "symfony/polyfill-intl-idn": "^1.10" }, "require-dev": { - "dominicsayers/isemail": "dev-master", - "phpunit/phpunit": "^4.8.35||^5.7||^6.0", + "dominicsayers/isemail": "^3.0.7", + "phpunit/phpunit": "^4.8.36|^7.5.15", "satooshi/php-coveralls": "^1.0.1" }, "suggest": { @@ -216,7 +264,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "2.1.x-dev" } }, "autoload": { @@ -242,95 +290,51 @@ "validation", "validator" ], - "time": "2019-06-23T10:14:27+00:00" - }, - { - "name": "erusev/parsedown", - "version": "1.7.3", - "source": { - "type": "git", - "url": "https://github.com/erusev/parsedown.git", - "reference": "6d893938171a817f4e9bc9e86f2da1e370b7bcd7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/erusev/parsedown/zipball/6d893938171a817f4e9bc9e86f2da1e370b7bcd7", - "reference": "6d893938171a817f4e9bc9e86f2da1e370b7bcd7", - "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" - ], - "time": "2019-03-17T18:48:37+00:00" + "time": "2020-02-13T22:36:52+00:00" }, { "name": "laravel/framework", - "version": "v5.8.24", + "version": "v7.3.0", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "bb2a0afef35f508f77c049c51f04087a14de0055" + "reference": "36d8958b5b8058ef0641806e490f91102fdea70d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/bb2a0afef35f508f77c049c51f04087a14de0055", - "reference": "bb2a0afef35f508f77c049c51f04087a14de0055", + "url": "https://api.github.com/repos/laravel/framework/zipball/36d8958b5b8058ef0641806e490f91102fdea70d", + "reference": "36d8958b5b8058ef0641806e490f91102fdea70d", "shasum": "" }, "require": { "doctrine/inflector": "^1.1", "dragonmantank/cron-expression": "^2.0", - "egulias/email-validator": "^2.0", - "erusev/parsedown": "^1.7", + "egulias/email-validator": "^2.1.10", "ext-json": "*", "ext-mbstring": "*", "ext-openssl": "*", + "league/commonmark": "^1.3", "league/flysystem": "^1.0.8", - "monolog/monolog": "^1.12", - "nesbot/carbon": "^1.26.3 || ^2.0", + "monolog/monolog": "^2.0", + "nesbot/carbon": "^2.17", "opis/closure": "^3.1", - "php": "^7.1.3", + "php": "^7.2.5", "psr/container": "^1.0", "psr/simple-cache": "^1.0", - "ramsey/uuid": "^3.7", + "ramsey/uuid": "^3.7|^4.0", "swiftmailer/swiftmailer": "^6.0", - "symfony/console": "^4.2", - "symfony/debug": "^4.2", - "symfony/finder": "^4.2", - "symfony/http-foundation": "^4.2", - "symfony/http-kernel": "^4.2", - "symfony/process": "^4.2", - "symfony/routing": "^4.2", - "symfony/var-dumper": "^4.2", - "tijsverkoyen/css-to-inline-styles": "^2.2.1", - "vlucas/phpdotenv": "^3.3" + "symfony/console": "^5.0", + "symfony/error-handler": "^5.0", + "symfony/finder": "^5.0", + "symfony/http-foundation": "^5.0", + "symfony/http-kernel": "^5.0", + "symfony/mime": "^5.0", + "symfony/process": "^5.0", + "symfony/routing": "^5.0", + "symfony/var-dumper": "^5.0", + "tijsverkoyen/css-to-inline-styles": "^2.2.2", + "vlucas/phpdotenv": "^4.0", + "voku/portable-ascii": "^1.4.8" }, "conflict": { "tightenco/collect": "<5.5.33" @@ -361,6 +365,7 @@ "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" @@ -368,46 +373,47 @@ "require-dev": { "aws/aws-sdk-php": "^3.0", "doctrine/dbal": "^2.6", - "filp/whoops": "^2.1.4", - "guzzlehttp/guzzle": "^6.3", + "filp/whoops": "^2.4", + "guzzlehttp/guzzle": "^6.3.1|^7.0", "league/flysystem-cached-adapter": "^1.0", - "mockery/mockery": "^1.0", + "mockery/mockery": "^1.3.1", "moontoast/math": "^1.1", - "orchestra/testbench-core": "3.8.*", + "orchestra/testbench-core": "^5.0", "pda/pheanstalk": "^4.0", - "phpunit/phpunit": "^7.5|^8.0", + "phpunit/phpunit": "^8.4|^9.0", "predis/predis": "^1.1.1", - "symfony/css-selector": "^4.2", - "symfony/dom-crawler": "^4.2", - "true/punycode": "^2.1" + "symfony/cache": "^5.0" }, "suggest": { - "aws/aws-sdk-php": "Required to use the SQS queue driver and SES mail driver (^3.0).", + "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage and SES mail driver (^3.0).", "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.6).", + "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.", - "filp/whoops": "Required for friendly error pages in development (^2.1.4).", - "fzaninotto/faker": "Required to use the eloquent factory builder (^1.4).", - "guzzlehttp/guzzle": "Required to use the Mailgun and Mandrill mail drivers and the ping methods on schedules (^6.0).", - "laravel/tinker": "Required to use the tinker console command (^1.0).", + "ext-redis": "Required to use the Redis cache and queue drivers (^4.0|^5.0).", + "filp/whoops": "Required for friendly error pages in development (^2.4).", + "fzaninotto/faker": "Required to use the eloquent factory builder (^1.9.1).", + "guzzlehttp/guzzle": "Required to use the HTTP Client, Mailgun mail driver and the ping methods on schedules (^6.3.1|^7.0).", + "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-rackspace": "Required to use the Flysystem Rackspace driver (^1.0).", "league/flysystem-sftp": "Required to use the Flysystem SFTP driver (^1.0).", + "mockery/mockery": "Required to use mocking (^1.3.1).", "moontoast/math": "Required to use ordered UUIDs (^1.1).", - "nexmo/client": "Required to use the Nexmo transport (^1.0).", + "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).", "pda/pheanstalk": "Required to use the beanstalk queue driver (^4.0).", - "predis/predis": "Required to use the redis cache and queue drivers (^1.0).", - "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^3.0).", - "symfony/css-selector": "Required to use some of the crawler integration testing tools (^4.2).", - "symfony/dom-crawler": "Required to use most of the crawler integration testing tools (^4.2).", - "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^1.1).", + "phpunit/phpunit": "Required to use assertions and run tests (^8.4|^9.0).", + "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).", + "symfony/cache": "Required to PSR-6 cache bridge (^5.0).", + "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": "5.8-dev" + "dev-master": "7.x-dev" } }, "autoload": { @@ -435,20 +441,108 @@ "framework", "laravel" ], - "time": "2019-06-19T16:40:24+00:00" + "time": "2020-03-24T15:17:51+00:00" + }, + { + "name": "league/commonmark", + "version": "1.3.2", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/commonmark.git", + "reference": "75542a366ccbe1896ed79fcf3e8e68206d6c4257" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/75542a366ccbe1896ed79fcf3e8e68206d6c4257", + "reference": "75542a366ccbe1896ed79fcf3e8e68206d6c4257", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": "^7.1" + }, + "conflict": { + "scrutinizer/ocular": "1.7.*" + }, + "require-dev": { + "cebe/markdown": "~1.0", + "commonmark/commonmark.js": "0.29.1", + "erusev/parsedown": "~1.0", + "ext-json": "*", + "github/gfm": "0.29.0", + "michelf/php-markdown": "~1.4", + "mikehaertl/php-shellcommand": "^1.4", + "phpstan/phpstan-shim": "^0.11.5", + "phpunit/phpunit": "^7.5", + "scrutinizer/ocular": "^1.5", + "symfony/finder": "^4.2" + }, + "bin": [ + "bin/commonmark" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-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" + ], + "funding": [ + { + "url": "https://github.com/colinodell", + "type": "github" + }, + { + "url": "https://www.patreon.com/colinodell", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league%2fcommonmark", + "type": "tidelift" + } + ], + "time": "2020-03-25T19:55:28+00:00" }, { "name": "league/flysystem", - "version": "1.0.53", + "version": "1.0.66", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "08e12b7628f035600634a5e76d95b5eb66cea674" + "reference": "021569195e15f8209b1c4bebb78bd66aa4f08c21" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/08e12b7628f035600634a5e76d95b5eb66cea674", - "reference": "08e12b7628f035600634a5e76d95b5eb66cea674", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/021569195e15f8209b1c4bebb78bd66aa4f08c21", + "reference": "021569195e15f8209b1c4bebb78bd66aa4f08c21", "shasum": "" }, "require": { @@ -460,7 +554,7 @@ }, "require-dev": { "phpspec/phpspec": "^3.4", - "phpunit/phpunit": "^5.7.10" + "phpunit/phpunit": "^5.7.26" }, "suggest": { "ext-fileinfo": "Required for MimeType", @@ -519,25 +613,31 @@ "sftp", "storage" ], - "time": "2019-06-18T20:09:29+00:00" + "funding": [ + { + "url": "https://offset.earth/frankdejonge", + "type": "other" + } + ], + "time": "2020-03-17T18:58:12+00:00" }, { "name": "monolog/monolog", - "version": "1.24.0", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "bfc9ebb28f97e7a24c45bdc3f0ff482e47bb0266" + "reference": "c861fcba2ca29404dc9e617eedd9eff4616986b8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/bfc9ebb28f97e7a24c45bdc3f0ff482e47bb0266", - "reference": "bfc9ebb28f97e7a24c45bdc3f0ff482e47bb0266", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/c861fcba2ca29404dc9e617eedd9eff4616986b8", + "reference": "c861fcba2ca29404dc9e617eedd9eff4616986b8", "shasum": "" }, "require": { - "php": ">=5.3.0", - "psr/log": "~1.0" + "php": "^7.2", + "psr/log": "^1.0.1" }, "provide": { "psr/log-implementation": "1.0.0" @@ -545,33 +645,36 @@ "require-dev": { "aws/aws-sdk-php": "^2.4.9 || ^3.0", "doctrine/couchdb": "~1.0@dev", - "graylog2/gelf-php": "~1.0", - "jakub-onderka/php-parallel-lint": "0.9", + "elasticsearch/elasticsearch": "^6.0", + "graylog2/gelf-php": "^1.4.2", + "jakub-onderka/php-parallel-lint": "^0.9", "php-amqplib/php-amqplib": "~2.4", "php-console/php-console": "^3.1.3", - "phpunit/phpunit": "~4.5", - "phpunit/phpunit-mock-objects": "2.3.0", + "phpspec/prophecy": "^1.6.1", + "phpunit/phpunit": "^8.3", + "predis/predis": "^1.1", + "rollbar/rollbar": "^1.3", "ruflin/elastica": ">=0.90 <3.0", - "sentry/sentry": "^0.13", "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-mongo": "Allow sending log messages to a MongoDB server", + "ext-mbstring": "Allow to work properly with unicode symbols", + "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", - "mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver", + "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", - "sentry/sentry": "Allow sending log messages to a Sentry server" + "ruflin/elastica": "Allow sending log messages to an Elastic Search server" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "2.x-dev" } }, "autoload": { @@ -597,37 +700,44 @@ "logging", "psr-3" ], - "time": "2018-11-05T09:00:11+00:00" + "time": "2019-12-20T14:22:59+00:00" }, { "name": "nesbot/carbon", - "version": "2.19.2", + "version": "2.32.1", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "adcad3f3af52d0ad4ad7b05f43aa58243b6ca67b" + "reference": "ecb525c766deb3bbbb6a0082ea0e41d3d9ae477c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/adcad3f3af52d0ad4ad7b05f43aa58243b6ca67b", - "reference": "adcad3f3af52d0ad4ad7b05f43aa58243b6ca67b", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/ecb525c766deb3bbbb6a0082ea0e41d3d9ae477c", + "reference": "ecb525c766deb3bbbb6a0082ea0e41d3d9ae477c", "shasum": "" }, "require": { "ext-json": "*", "php": "^7.1.8 || ^8.0", - "symfony/translation": "^3.4 || ^4.0" + "symfony/translation": "^3.4 || ^4.0 || ^5.0" }, "require-dev": { + "doctrine/orm": "^2.7", "friendsofphp/php-cs-fixer": "^2.14 || ^3.0", "kylekatarnls/multi-tester": "^1.1", - "phpmd/phpmd": "^2.6", + "phpmd/phpmd": "^2.8", "phpstan/phpstan": "^0.11", "phpunit/phpunit": "^7.5 || ^8.0", "squizlabs/php_codesniffer": "^3.4" }, + "bin": [ + "bin/carbon" + ], "type": "library", "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + }, "laravel": { "providers": [ "Carbon\\Laravel\\ServiceProvider" @@ -648,29 +758,43 @@ "name": "Brian Nesbitt", "email": "brian@nesbot.com", "homepage": "http://nesbot.com" + }, + { + "name": "kylekatarnls", + "homepage": "http://github.com/kylekatarnls" } ], - "description": "A simple API extension for DateTime.", + "description": "An API extension for DateTime that supports 281 different languages.", "homepage": "http://carbon.nesbot.com", "keywords": [ "date", "datetime", "time" ], - "time": "2019-06-07T09:56:45+00:00" + "funding": [ + { + "url": "https://opencollective.com/Carbon", + "type": "open_collective" + }, + { + "url": "https://tidelift.com/funding/github/packagist/nesbot/carbon", + "type": "tidelift" + } + ], + "time": "2020-03-26T13:04:10+00:00" }, { "name": "opis/closure", - "version": "3.3.0", + "version": "3.5.1", "source": { "type": "git", "url": "https://github.com/opis/closure.git", - "reference": "f846725591203098246276b2e7b9e8b7814c4965" + "reference": "93ebc5712cdad8d5f489b500c59d122df2e53969" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/opis/closure/zipball/f846725591203098246276b2e7b9e8b7814c4965", - "reference": "f846725591203098246276b2e7b9e8b7814c4965", + "url": "https://api.github.com/repos/opis/closure/zipball/93ebc5712cdad8d5f489b500c59d122df2e53969", + "reference": "93ebc5712cdad8d5f489b500c59d122df2e53969", "shasum": "" }, "require": { @@ -683,7 +807,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.3.x-dev" + "dev-master": "3.5.x-dev" } }, "autoload": { @@ -718,123 +842,20 @@ "serialization", "serialize" ], - "time": "2019-05-31T20:04:32+00:00" - }, - { - "name": "padosoft/io", - "version": "1.8.0", - "source": { - "type": "git", - "url": "https://github.com/padosoft/io.git", - "reference": "788eef6d9b00d28bb17f7fa1e78489df0075259e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/padosoft/io/zipball/788eef6d9b00d28bb17f7fa1e78489df0075259e", - "reference": "788eef6d9b00d28bb17f7fa1e78489df0075259e", - "shasum": "" - }, - "require": { - "php": ">=7.0.0" - }, - "require-dev": { - "phpunit/phpunit": "~5.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Padosoft\\Io\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Lorenzo Padovani", - "email": "helpdesk@padosoft.com", - "homepage": "https://www.padosoft.com", - "role": "Developer" - } - ], - "description": "simple agnostic package for IO releted (files, dir, etc..)", - "homepage": "https://github.com/padosoft/io", - "keywords": [ - "directory", - "file", - "io", - "padosoft", - "path" - ], - "time": "2016-09-24T15:48:48+00:00" - }, - { - "name": "padosoft/laravel-request", - "version": "2.0.0", - "source": { - "type": "git", - "url": "https://github.com/padosoft/laravel-request.git", - "reference": "8c4ea439db6ad2e7d28402b0f1e358d4df9c7768" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/padosoft/laravel-request/zipball/8c4ea439db6ad2e7d28402b0f1e358d4df9c7768", - "reference": "8c4ea439db6ad2e7d28402b0f1e358d4df9c7768", - "shasum": "" - }, - "require": { - "illuminate/http": "^5.7", - "illuminate/support": "^5.7", - "padosoft/io": "^1.0", - "php": ">=7.0.0" - }, - "require-dev": { - "mockery/mockery": "^0.9.5", - "orchestra/testbench": "^3.7", - "padosoft/test": "^1.0.1", - "phpunit/phpunit": "^7.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Padosoft\\Laravel\\Request\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Lorenzo Padovani", - "email": "helpdesk@padosoft.com", - "homepage": "https://www.padosoft.com", - "role": "Developer" - } - ], - "description": "Laravel Package to interact with Illuminate Request and Files Upload.", - "homepage": "https://github.com/padosoft/laravel-request", - "keywords": [ - "laravel-request", - "padosoft", - "request", - "upload" - ], - "time": "2018-10-23T09:01:05+00:00" + "time": "2019-11-29T22:36:02+00:00" }, { "name": "padosoft/support", - "version": "2.2.1", + "version": "2.3.0", "source": { "type": "git", "url": "https://github.com/padosoft/support.git", - "reference": "3e890602dfa163bf9a2e66b9afe6dab89d831f73" + "reference": "ad682926a55ae5fcb0be1caddcfaf867c1437ffb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/padosoft/support/zipball/3e890602dfa163bf9a2e66b9afe6dab89d831f73", - "reference": "3e890602dfa163bf9a2e66b9afe6dab89d831f73", + "url": "https://api.github.com/repos/padosoft/support/zipball/ad682926a55ae5fcb0be1caddcfaf867c1437ffb", + "reference": "ad682926a55ae5fcb0be1caddcfaf867c1437ffb", "shasum": "" }, "require": { @@ -881,119 +902,128 @@ "padosoft", "support" ], - "time": "2019-06-18T15:45:29+00:00" + "time": "2019-07-09T16:42:20+00:00" }, { - "name": "paragonie/random_compat", - "version": "v9.99.99", + "name": "phpoption/phpoption", + "version": "1.7.3", "source": { "type": "git", - "url": "https://github.com/paragonie/random_compat.git", - "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95" + "url": "https://github.com/schmittjoh/php-option.git", + "reference": "4acfd6a4b33a509d8c88f50e5222f734b6aeebae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paragonie/random_compat/zipball/84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", - "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/4acfd6a4b33a509d8c88f50e5222f734b6aeebae", + "reference": "4acfd6a4b33a509d8c88f50e5222f734b6aeebae", "shasum": "" }, "require": { - "php": "^7" + "php": "^5.5.9 || ^7.0 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "4.*|5.*", - "vimeo/psalm": "^1" - }, - "suggest": { - "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." + "bamarni/composer-bin-plugin": "^1.3", + "phpunit/phpunit": "^4.8.35 || ^5.0 || ^6.0 || ^7.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.7-dev" + } + }, + "autoload": { + "psr-4": { + "PhpOption\\": "src/PhpOption/" + } + }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "Apache-2.0" ], "authors": [ { - "name": "Paragon Initiative Enterprises", - "email": "security@paragonie.com", - "homepage": "https://paragonie.com" + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com" + }, + { + "name": "Graham Campbell", + "email": "graham@alt-three.com" } ], - "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", + "description": "Option Type for PHP", "keywords": [ - "csprng", - "polyfill", - "pseudorandom", - "random" + "language", + "option", + "php", + "type" ], - "time": "2018-07-02T15:55:56+00:00" + "time": "2020-03-21T18:07:53+00:00" }, { - "name": "phpoption/phpoption", - "version": "1.5.0", + "name": "psr/container", + "version": "1.0.0", "source": { "type": "git", - "url": "https://github.com/schmittjoh/php-option.git", - "reference": "94e644f7d2051a5f0fcf77d81605f152eecff0ed" + "url": "https://github.com/php-fig/container.git", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/94e644f7d2051a5f0fcf77d81605f152eecff0ed", - "reference": "94e644f7d2051a5f0fcf77d81605f152eecff0ed", + "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", "shasum": "" }, "require": { "php": ">=5.3.0" }, - "require-dev": { - "phpunit/phpunit": "4.7.*" - }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { - "psr-0": { - "PhpOption\\": "src/" + "psr-4": { + "Psr\\Container\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "Apache2" + "MIT" ], "authors": [ { - "name": "Johannes M. Schmitt", - "email": "schmittjoh@gmail.com" + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" } ], - "description": "Option Type for PHP", + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", "keywords": [ - "language", - "option", - "php", - "type" + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" ], - "time": "2015-07-25T16:39:46+00:00" + "time": "2017-02-14T16:28:37+00:00" }, { - "name": "psr/container", + "name": "psr/event-dispatcher", "version": "1.0.0", "source": { "type": "git", - "url": "https://github.com/php-fig/container.git", - "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", - "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=7.2.0" }, "type": "library", "extra": { @@ -1003,7 +1033,7 @@ }, "autoload": { "psr-4": { - "Psr\\Container\\": "src/" + "Psr\\EventDispatcher\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1016,29 +1046,26 @@ "homepage": "http://www.php-fig.org/" } ], - "description": "Common Container Interface (PHP FIG PSR-11)", - "homepage": "https://github.com/php-fig/container", + "description": "Standard interfaces for event handling.", "keywords": [ - "PSR-11", - "container", - "container-interface", - "container-interop", - "psr" + "events", + "psr", + "psr-14" ], - "time": "2017-02-14T16:28:37+00:00" + "time": "2019-01-08T18:20:26+00:00" }, { "name": "psr/log", - "version": "1.1.0", + "version": "1.1.3", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd" + "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd", - "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd", + "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc", + "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc", "shasum": "" }, "require": { @@ -1047,7 +1074,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.1.x-dev" } }, "autoload": { @@ -1072,7 +1099,7 @@ "psr", "psr-3" ], - "time": "2018-11-20T15:27:04+00:00" + "time": "2020-03-23T09:12:05+00:00" }, { "name": "psr/simple-cache", @@ -1122,100 +1149,166 @@ ], "time": "2017-10-23T01:57:42+00:00" }, + { + "name": "ramsey/collection", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/ramsey/collection.git", + "reference": "925ad8cf55ba7a3fc92e332c58fd0478ace3e1ca" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/collection/zipball/925ad8cf55ba7a3fc92e332c58fd0478ace3e1ca", + "reference": "925ad8cf55ba7a3fc92e332c58fd0478ace3e1ca", + "shasum": "" + }, + "require": { + "php": "^7.2" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "^0.5.0", + "fzaninotto/faker": "^1.5", + "jakub-onderka/php-parallel-lint": "^1", + "jangregor/phpstan-prophecy": "^0.6", + "mockery/mockery": "^1.3", + "phpstan/extension-installer": "^1", + "phpstan/phpdoc-parser": "0.4.1", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-mockery": "^0.12", + "phpstan/phpstan-phpunit": "^0.12", + "phpunit/phpunit": "^8.5", + "slevomat/coding-standard": "^6.0", + "squizlabs/php_codesniffer": "^3.5" + }, + "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 7.2+ library for representing and manipulating collections.", + "homepage": "https://github.com/ramsey/collection", + "keywords": [ + "array", + "collection", + "hash", + "map", + "queue", + "set" + ], + "time": "2020-01-05T00:22:59+00:00" + }, { "name": "ramsey/uuid", - "version": "3.8.0", + "version": "4.0.0", "source": { "type": "git", "url": "https://github.com/ramsey/uuid.git", - "reference": "d09ea80159c1929d75b3f9c60504d613aeb4a1e3" + "reference": "2c9644b1d0c2bc58732413252bcbb6dce2eb0e0e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/d09ea80159c1929d75b3f9c60504d613aeb4a1e3", - "reference": "d09ea80159c1929d75b3f9c60504d613aeb4a1e3", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/2c9644b1d0c2bc58732413252bcbb6dce2eb0e0e", + "reference": "2c9644b1d0c2bc58732413252bcbb6dce2eb0e0e", "shasum": "" }, "require": { - "paragonie/random_compat": "^1.0|^2.0|9.99.99", - "php": "^5.4 || ^7.0", + "brick/math": "^0.8", + "ext-json": "*", + "php": "^7.2 || ^8", + "ramsey/collection": "^1.0", "symfony/polyfill-ctype": "^1.8" }, "replace": { "rhumsaa/uuid": "self.version" }, "require-dev": { - "codeception/aspect-mock": "^1.0 | ~2.0.0", - "doctrine/annotations": "~1.2.0", - "goaop/framework": "1.0.0-alpha.2 | ^1.0 | ~2.1.0", - "ircmaxell/random-lib": "^1.1", - "jakub-onderka/php-parallel-lint": "^0.9.0", - "mockery/mockery": "^0.9.9", + "codeception/aspect-mock": "^3", + "dealerdirect/phpcodesniffer-composer-installer": "^0.6.2", + "doctrine/annotations": "^1.8", + "goaop/framework": "^2", + "jakub-onderka/php-parallel-lint": "^1", + "mockery/mockery": "^1.3", "moontoast/math": "^1.1", - "php-mock/php-mock-phpunit": "^0.3|^1.1", - "phpunit/phpunit": "^4.7|^5.0|^6.5", - "squizlabs/php_codesniffer": "^2.3" + "paragonie/random-lib": "^2", + "php-mock/php-mock-mockery": "^1.3", + "php-mock/php-mock-phpunit": "^2.5", + "phpstan/extension-installer": "^1.0", + "phpstan/phpdoc-parser": "0.4.3", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-mockery": "^0.12", + "phpstan/phpstan-phpunit": "^0.12", + "phpunit/phpunit": "^8.5", + "psy/psysh": "^0.10.0", + "slevomat/coding-standard": "^6.0", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "3.9.4" }, "suggest": { - "ext-ctype": "Provides support for PHP Ctype functions", - "ext-libsodium": "Provides the PECL libsodium extension for use with the SodiumRandomGenerator", - "ext-uuid": "Provides the PECL UUID extension for use with the PeclUuidTimeGenerator and PeclUuidRandomGenerator", - "ircmaxell/random-lib": "Provides RandomLib for use with the RandomLibAdapter", - "moontoast/math": "Provides support for converting UUID to 128-bit integer (in string form).", - "ramsey/uuid-console": "A console application for generating UUIDs with ramsey/uuid", + "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-master": "3.x-dev" + "dev-master": "4.x-dev" } }, "autoload": { "psr-4": { "Ramsey\\Uuid\\": "src/" - } + }, + "files": [ + "src/functions.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "authors": [ - { - "name": "Marijn Huizendveld", - "email": "marijn.huizendveld@gmail.com" - }, - { - "name": "Thibaud Fabre", - "email": "thibaud@aztech.io" - }, - { - "name": "Ben Ramsey", - "email": "ben@benramsey.com", - "homepage": "https://benramsey.com" - } - ], - "description": "Formerly rhumsaa/uuid. A PHP 5.4+ library for generating RFC 4122 version 1, 3, 4, and 5 universally unique identifiers (UUID).", + "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).", "homepage": "https://github.com/ramsey/uuid", "keywords": [ "guid", "identifier", "uuid" ], - "time": "2018-07-19T23:38:55+00:00" + "funding": [ + { + "url": "https://github.com/ramsey", + "type": "github" + } + ], + "time": "2020-03-22T02:34:13+00:00" }, { "name": "swiftmailer/swiftmailer", - "version": "v6.2.1", + "version": "v6.2.3", "source": { "type": "git", "url": "https://github.com/swiftmailer/swiftmailer.git", - "reference": "5397cd05b0a0f7937c47b0adcb4c60e5ab936b6a" + "reference": "149cfdf118b169f7840bbe3ef0d4bc795d1780c9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/5397cd05b0a0f7937c47b0adcb4c60e5ab936b6a", - "reference": "5397cd05b0a0f7937c47b0adcb4c60e5ab936b6a", + "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/149cfdf118b169f7840bbe3ef0d4bc795d1780c9", + "reference": "149cfdf118b169f7840bbe3ef0d4bc795d1780c9", "shasum": "" }, "require": { @@ -1264,44 +1357,45 @@ "mail", "mailer" ], - "time": "2019-04-21T09:21:45+00:00" + "time": "2019-11-12T09:31:26+00:00" }, { "name": "symfony/console", - "version": "v4.3.1", + "version": "v5.0.5", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "d50bbeeb0e17e6dd4124ea391eff235e932cbf64" + "reference": "d29e2d36941de13600c399e393a60b8cfe59ac49" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/d50bbeeb0e17e6dd4124ea391eff235e932cbf64", - "reference": "d50bbeeb0e17e6dd4124ea391eff235e932cbf64", + "url": "https://api.github.com/repos/symfony/console/zipball/d29e2d36941de13600c399e393a60b8cfe59ac49", + "reference": "d29e2d36941de13600c399e393a60b8cfe59ac49", "shasum": "" }, "require": { - "php": "^7.1.3", + "php": "^7.2.5", "symfony/polyfill-mbstring": "~1.0", "symfony/polyfill-php73": "^1.8", - "symfony/service-contracts": "^1.1" + "symfony/service-contracts": "^1.1|^2" }, "conflict": { - "symfony/dependency-injection": "<3.4", - "symfony/event-dispatcher": "<4.3", - "symfony/process": "<3.3" + "symfony/dependency-injection": "<4.4", + "symfony/event-dispatcher": "<4.4", + "symfony/lock": "<4.4", + "symfony/process": "<4.4" }, "provide": { "psr/log-implementation": "1.0" }, "require-dev": { "psr/log": "~1.0", - "symfony/config": "~3.4|~4.0", - "symfony/dependency-injection": "~3.4|~4.0", - "symfony/event-dispatcher": "^4.3", - "symfony/lock": "~3.4|~4.0", - "symfony/process": "~3.4|~4.0", - "symfony/var-dumper": "^4.3" + "symfony/config": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/event-dispatcher": "^4.4|^5.0", + "symfony/lock": "^4.4|^5.0", + "symfony/process": "^4.4|^5.0", + "symfony/var-dumper": "^4.4|^5.0" }, "suggest": { "psr/log": "For using the console logger", @@ -1312,7 +1406,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "5.0-dev" } }, "autoload": { @@ -1339,29 +1433,43 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2019-06-05T13:25:51+00:00" + "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": "2020-02-24T15:05:31+00:00" }, { "name": "symfony/css-selector", - "version": "v4.3.1", + "version": "v5.0.5", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "105c98bb0c5d8635bea056135304bd8edcc42b4d" + "reference": "a0b51ba9938ccc206d9284de7eb527c2d4550b44" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/105c98bb0c5d8635bea056135304bd8edcc42b4d", - "reference": "105c98bb0c5d8635bea056135304bd8edcc42b4d", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/a0b51ba9938ccc206d9284de7eb527c2d4550b44", + "reference": "a0b51ba9938ccc206d9284de7eb527c2d4550b44", "shasum": "" }, "require": { - "php": "^7.1.3" + "php": "^7.2.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "5.0-dev" } }, "autoload": { @@ -1377,14 +1485,14 @@ "MIT" ], "authors": [ - { - "name": "Jean-François Simon", - "email": "jeanfrancois.simon@sensiolabs.com" - }, { "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" @@ -1392,41 +1500,40 @@ ], "description": "Symfony CssSelector Component", "homepage": "https://symfony.com", - "time": "2019-01-16T21:53:39+00:00" + "time": "2020-02-04T09:41:09+00:00" }, { - "name": "symfony/debug", - "version": "v4.3.1", + "name": "symfony/error-handler", + "version": "v5.0.5", "source": { "type": "git", - "url": "https://github.com/symfony/debug.git", - "reference": "4e025104f1f9adb1f7a2d14fb102c9986d6e97c6" + "url": "https://github.com/symfony/error-handler.git", + "reference": "24a938d9913f42d006ee1ca0164ea1f29c1067ec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/4e025104f1f9adb1f7a2d14fb102c9986d6e97c6", - "reference": "4e025104f1f9adb1f7a2d14fb102c9986d6e97c6", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/24a938d9913f42d006ee1ca0164ea1f29c1067ec", + "reference": "24a938d9913f42d006ee1ca0164ea1f29c1067ec", "shasum": "" }, "require": { - "php": "^7.1.3", - "psr/log": "~1.0" - }, - "conflict": { - "symfony/http-kernel": "<3.4" + "php": "^7.2.5", + "psr/log": "^1.0", + "symfony/var-dumper": "^4.4|^5.0" }, "require-dev": { - "symfony/http-kernel": "~3.4|~4.0" + "symfony/http-kernel": "^4.4|^5.0", + "symfony/serializer": "^4.4|^5.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "5.0-dev" } }, "autoload": { "psr-4": { - "Symfony\\Component\\Debug\\": "" + "Symfony\\Component\\ErrorHandler\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -1446,43 +1553,57 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Debug Component", + "description": "Symfony ErrorHandler Component", "homepage": "https://symfony.com", - "time": "2019-05-30T16:10:05+00:00" + "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": "2020-02-29T10:07:09+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v4.3.1", + "version": "v5.0.5", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "4e6c670af81c4fb0b6c08b035530a9915d0b691f" + "reference": "b45ad88b253c5a9702ce218e201d89c85d148cea" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/4e6c670af81c4fb0b6c08b035530a9915d0b691f", - "reference": "4e6c670af81c4fb0b6c08b035530a9915d0b691f", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/b45ad88b253c5a9702ce218e201d89c85d148cea", + "reference": "b45ad88b253c5a9702ce218e201d89c85d148cea", "shasum": "" }, "require": { - "php": "^7.1.3", - "symfony/event-dispatcher-contracts": "^1.1" + "php": "^7.2.5", + "symfony/event-dispatcher-contracts": "^2" }, "conflict": { - "symfony/dependency-injection": "<3.4" + "symfony/dependency-injection": "<4.4" }, "provide": { "psr/event-dispatcher-implementation": "1.0", - "symfony/event-dispatcher-implementation": "1.1" + "symfony/event-dispatcher-implementation": "2.0" }, "require-dev": { "psr/log": "~1.0", - "symfony/config": "~3.4|~4.0", - "symfony/dependency-injection": "~3.4|~4.0", - "symfony/expression-language": "~3.4|~4.0", - "symfony/http-foundation": "^3.4|^4.0", - "symfony/service-contracts": "^1.1", - "symfony/stopwatch": "~3.4|~4.0" + "symfony/config": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/expression-language": "^4.4|^5.0", + "symfony/http-foundation": "^4.4|^5.0", + "symfony/service-contracts": "^1.1|^2", + "symfony/stopwatch": "^4.4|^5.0" }, "suggest": { "symfony/dependency-injection": "", @@ -1491,7 +1612,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "5.0-dev" } }, "autoload": { @@ -1518,33 +1639,47 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2019-05-30T16:10:05+00:00" + "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": "2020-02-22T20:09:08+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v1.1.5", + "version": "v2.0.1", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "c61766f4440ca687de1084a5c00b08e167a2575c" + "reference": "af23c2584d4577d54661c434446fb8fbed6025dd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/c61766f4440ca687de1084a5c00b08e167a2575c", - "reference": "c61766f4440ca687de1084a5c00b08e167a2575c", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/af23c2584d4577d54661c434446fb8fbed6025dd", + "reference": "af23c2584d4577d54661c434446fb8fbed6025dd", "shasum": "" }, "require": { - "php": "^7.1.3" + "php": "^7.2.5", + "psr/event-dispatcher": "^1" }, "suggest": { - "psr/event-dispatcher": "", "symfony/event-dispatcher-implementation": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -1576,29 +1711,29 @@ "interoperability", "standards" ], - "time": "2019-06-20T06:46:26+00:00" + "time": "2019-11-18T17:27:11+00:00" }, { "name": "symfony/finder", - "version": "v4.3.1", + "version": "v5.0.5", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "b3d4f4c0e4eadfdd8b296af9ca637cfbf51d8176" + "reference": "6251f201187ca9d66f6b099d3de65d279e971138" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/b3d4f4c0e4eadfdd8b296af9ca637cfbf51d8176", - "reference": "b3d4f4c0e4eadfdd8b296af9ca637cfbf51d8176", + "url": "https://api.github.com/repos/symfony/finder/zipball/6251f201187ca9d66f6b099d3de65d279e971138", + "reference": "6251f201187ca9d66f6b099d3de65d279e971138", "shasum": "" }, "require": { - "php": "^7.1.3" + "php": "^7.2.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "5.0-dev" } }, "autoload": { @@ -1625,35 +1760,49 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2019-05-26T20:47:49+00:00" + "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": "2020-02-14T07:43:07+00:00" }, { "name": "symfony/http-foundation", - "version": "v4.3.1", + "version": "v5.0.5", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "b7e4945dd9b277cd24e93566e4da0a87956392a9" + "reference": "6f9c2ba72f4295d7ce6cf9f79dbb18036291d335" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/b7e4945dd9b277cd24e93566e4da0a87956392a9", - "reference": "b7e4945dd9b277cd24e93566e4da0a87956392a9", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/6f9c2ba72f4295d7ce6cf9f79dbb18036291d335", + "reference": "6f9c2ba72f4295d7ce6cf9f79dbb18036291d335", "shasum": "" }, "require": { - "php": "^7.1.3", - "symfony/mime": "^4.3", + "php": "^7.2.5", + "symfony/mime": "^4.4|^5.0", "symfony/polyfill-mbstring": "~1.1" }, "require-dev": { "predis/predis": "~1.0", - "symfony/expression-language": "~3.4|~4.0" + "symfony/expression-language": "^4.4|^5.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "5.0-dev" } }, "autoload": { @@ -1680,72 +1829,76 @@ ], "description": "Symfony HttpFoundation Component", "homepage": "https://symfony.com", - "time": "2019-06-06T10:05:02+00:00" + "time": "2020-02-14T07:43:07+00:00" }, { "name": "symfony/http-kernel", - "version": "v4.3.1", + "version": "v5.0.5", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "738ad561cd6a8d1c44ee1da941b2e628e264c429" + "reference": "021d7d54e080405678f2d8c54cb31d0bb03b4520" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/738ad561cd6a8d1c44ee1da941b2e628e264c429", - "reference": "738ad561cd6a8d1c44ee1da941b2e628e264c429", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/021d7d54e080405678f2d8c54cb31d0bb03b4520", + "reference": "021d7d54e080405678f2d8c54cb31d0bb03b4520", "shasum": "" }, "require": { - "php": "^7.1.3", + "php": "^7.2.5", "psr/log": "~1.0", - "symfony/debug": "~3.4|~4.0", - "symfony/event-dispatcher": "^4.3", - "symfony/http-foundation": "^4.1.1", - "symfony/polyfill-ctype": "~1.8", + "symfony/error-handler": "^4.4|^5.0", + "symfony/event-dispatcher": "^5.0", + "symfony/http-foundation": "^4.4|^5.0", + "symfony/polyfill-ctype": "^1.8", "symfony/polyfill-php73": "^1.9" }, "conflict": { - "symfony/browser-kit": "<4.3", - "symfony/config": "<3.4", - "symfony/dependency-injection": "<4.3", - "symfony/translation": "<4.2", - "symfony/var-dumper": "<4.1.1", - "twig/twig": "<1.34|<2.4,>=2" + "symfony/browser-kit": "<4.4", + "symfony/cache": "<5.0", + "symfony/config": "<5.0", + "symfony/dependency-injection": "<4.4", + "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.4" }, "provide": { "psr/log-implementation": "1.0" }, "require-dev": { "psr/cache": "~1.0", - "symfony/browser-kit": "^4.3", - "symfony/config": "~3.4|~4.0", - "symfony/console": "~3.4|~4.0", - "symfony/css-selector": "~3.4|~4.0", - "symfony/dependency-injection": "^4.3", - "symfony/dom-crawler": "~3.4|~4.0", - "symfony/expression-language": "~3.4|~4.0", - "symfony/finder": "~3.4|~4.0", - "symfony/process": "~3.4|~4.0", - "symfony/routing": "~3.4|~4.0", - "symfony/stopwatch": "~3.4|~4.0", - "symfony/templating": "~3.4|~4.0", - "symfony/translation": "~4.2", - "symfony/translation-contracts": "^1.1", - "symfony/var-dumper": "^4.1.1", - "twig/twig": "^1.34|^2.4" + "symfony/browser-kit": "^4.4|^5.0", + "symfony/config": "^5.0", + "symfony/console": "^4.4|^5.0", + "symfony/css-selector": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/dom-crawler": "^4.4|^5.0", + "symfony/expression-language": "^4.4|^5.0", + "symfony/finder": "^4.4|^5.0", + "symfony/process": "^4.4|^5.0", + "symfony/routing": "^4.4|^5.0", + "symfony/stopwatch": "^4.4|^5.0", + "symfony/translation": "^4.4|^5.0", + "symfony/translation-contracts": "^1.1|^2", + "twig/twig": "^2.4|^3.0" }, "suggest": { "symfony/browser-kit": "", "symfony/config": "", "symfony/console": "", - "symfony/dependency-injection": "", - "symfony/var-dumper": "" + "symfony/dependency-injection": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "5.0-dev" } }, "autoload": { @@ -1772,35 +1925,52 @@ ], "description": "Symfony HttpKernel Component", "homepage": "https://symfony.com", - "time": "2019-06-06T13:23:34+00:00" + "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": "2020-02-29T10:41:30+00:00" }, { "name": "symfony/mime", - "version": "v4.3.1", + "version": "v5.0.5", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "ec2c5565de60e03f33d4296a655e3273f0ad1f8b" + "reference": "9b3e5b5e58c56bbd76628c952d2b78556d305f3c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/ec2c5565de60e03f33d4296a655e3273f0ad1f8b", - "reference": "ec2c5565de60e03f33d4296a655e3273f0ad1f8b", + "url": "https://api.github.com/repos/symfony/mime/zipball/9b3e5b5e58c56bbd76628c952d2b78556d305f3c", + "reference": "9b3e5b5e58c56bbd76628c952d2b78556d305f3c", "shasum": "" }, "require": { - "php": "^7.1.3", + "php": "^7.2.5", "symfony/polyfill-intl-idn": "^1.10", "symfony/polyfill-mbstring": "^1.0" }, + "conflict": { + "symfony/mailer": "<4.4" + }, "require-dev": { - "egulias/email-validator": "^2.0", - "symfony/dependency-injection": "~3.4|^4.1" + "egulias/email-validator": "^2.1.10", + "symfony/dependency-injection": "^4.4|^5.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "5.0-dev" } }, "autoload": { @@ -1831,20 +2001,34 @@ "mime", "mime-type" ], - "time": "2019-06-04T09:22:54+00:00" + "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": "2020-02-04T09:41:09+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.11.0", + "version": "v1.15.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "82ebae02209c21113908c229e9883c419720738a" + "reference": "4719fa9c18b0464d399f1a63bf624b42b6fa8d14" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/82ebae02209c21113908c229e9883c419720738a", - "reference": "82ebae02209c21113908c229e9883c419720738a", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/4719fa9c18b0464d399f1a63bf624b42b6fa8d14", + "reference": "4719fa9c18b0464d399f1a63bf624b42b6fa8d14", "shasum": "" }, "require": { @@ -1856,7 +2040,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.11-dev" + "dev-master": "1.15-dev" } }, "autoload": { @@ -1872,13 +2056,13 @@ "MIT" ], "authors": [ - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - }, { "name": "Gert de Pagter", "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], "description": "Symfony polyfill for ctype functions", @@ -1889,20 +2073,34 @@ "polyfill", "portable" ], - "time": "2019-02-06T07:57:58+00:00" + "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": "2020-02-27T09:26:54+00:00" }, { "name": "symfony/polyfill-iconv", - "version": "v1.11.0", + "version": "v1.15.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-iconv.git", - "reference": "f037ea22acfaee983e271dd9c3b8bb4150bd8ad7" + "reference": "ad6d62792bfbcfc385dd34b424d4fcf9712a32c8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/f037ea22acfaee983e271dd9c3b8bb4150bd8ad7", - "reference": "f037ea22acfaee983e271dd9c3b8bb4150bd8ad7", + "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/ad6d62792bfbcfc385dd34b424d4fcf9712a32c8", + "reference": "ad6d62792bfbcfc385dd34b424d4fcf9712a32c8", "shasum": "" }, "require": { @@ -1914,7 +2112,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.11-dev" + "dev-master": "1.15-dev" } }, "autoload": { @@ -1948,26 +2146,40 @@ "portable", "shim" ], - "time": "2019-02-06T07:57:58+00:00" + "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": "2020-03-09T19:04:49+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.11.0", + "version": "v1.15.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "c766e95bec706cdd89903b1eda8afab7d7a6b7af" + "reference": "47bd6aa45beb1cd7c6a16b7d1810133b728bdfcf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/c766e95bec706cdd89903b1eda8afab7d7a6b7af", - "reference": "c766e95bec706cdd89903b1eda8afab7d7a6b7af", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/47bd6aa45beb1cd7c6a16b7d1810133b728bdfcf", + "reference": "47bd6aa45beb1cd7c6a16b7d1810133b728bdfcf", "shasum": "" }, "require": { "php": ">=5.3.3", "symfony/polyfill-mbstring": "^1.3", - "symfony/polyfill-php72": "^1.9" + "symfony/polyfill-php72": "^1.10" }, "suggest": { "ext-intl": "For best performance" @@ -1975,7 +2187,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.9-dev" + "dev-master": "1.15-dev" } }, "autoload": { @@ -1991,13 +2203,13 @@ "MIT" ], "authors": [ - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - }, { "name": "Laurent Bassin", "email": "laurent@bassin.info" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", @@ -2010,20 +2222,34 @@ "portable", "shim" ], - "time": "2019-03-04T13:44:35+00:00" + "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": "2020-03-09T19:04:49+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.11.0", + "version": "v1.15.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "fe5e94c604826c35a32fa832f35bd036b6799609" + "reference": "81ffd3a9c6d707be22e3012b827de1c9775fc5ac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fe5e94c604826c35a32fa832f35bd036b6799609", - "reference": "fe5e94c604826c35a32fa832f35bd036b6799609", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/81ffd3a9c6d707be22e3012b827de1c9775fc5ac", + "reference": "81ffd3a9c6d707be22e3012b827de1c9775fc5ac", "shasum": "" }, "require": { @@ -2035,7 +2261,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.11-dev" + "dev-master": "1.15-dev" } }, "autoload": { @@ -2069,20 +2295,34 @@ "portable", "shim" ], - "time": "2019-02-06T07:57:58+00:00" + "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": "2020-03-09T19:04:49+00:00" }, { "name": "symfony/polyfill-php72", - "version": "v1.11.0", + "version": "v1.15.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "ab50dcf166d5f577978419edd37aa2bb8eabce0c" + "reference": "37b0976c78b94856543260ce09b460a7bc852747" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/ab50dcf166d5f577978419edd37aa2bb8eabce0c", - "reference": "ab50dcf166d5f577978419edd37aa2bb8eabce0c", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/37b0976c78b94856543260ce09b460a7bc852747", + "reference": "37b0976c78b94856543260ce09b460a7bc852747", "shasum": "" }, "require": { @@ -2091,7 +2331,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.11-dev" + "dev-master": "1.15-dev" } }, "autoload": { @@ -2124,20 +2364,34 @@ "portable", "shim" ], - "time": "2019-02-06T07:57:58+00:00" + "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": "2020-02-27T09:26:54+00:00" }, { "name": "symfony/polyfill-php73", - "version": "v1.11.0", + "version": "v1.15.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "d1fb4abcc0c47be136208ad9d68bf59f1ee17abd" + "reference": "0f27e9f464ea3da33cbe7ca3bdf4eb66def9d0f7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/d1fb4abcc0c47be136208ad9d68bf59f1ee17abd", - "reference": "d1fb4abcc0c47be136208ad9d68bf59f1ee17abd", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/0f27e9f464ea3da33cbe7ca3bdf4eb66def9d0f7", + "reference": "0f27e9f464ea3da33cbe7ca3bdf4eb66def9d0f7", "shasum": "" }, "require": { @@ -2146,7 +2400,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.11-dev" + "dev-master": "1.15-dev" } }, "autoload": { @@ -2182,29 +2436,43 @@ "portable", "shim" ], - "time": "2019-02-06T07:57:58+00:00" + "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": "2020-02-27T09:26:54+00:00" }, { "name": "symfony/process", - "version": "v4.3.1", + "version": "v5.0.5", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "856d35814cf287480465bb7a6c413bb7f5f5e69c" + "reference": "fd4a86dd7e36437f2fc080d8c42c7415d828a0a8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/856d35814cf287480465bb7a6c413bb7f5f5e69c", - "reference": "856d35814cf287480465bb7a6c413bb7f5f5e69c", + "url": "https://api.github.com/repos/symfony/process/zipball/fd4a86dd7e36437f2fc080d8c42c7415d828a0a8", + "reference": "fd4a86dd7e36437f2fc080d8c42c7415d828a0a8", "shasum": "" }, "require": { - "php": "^7.1.3" + "php": "^7.2.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "5.0-dev" } }, "autoload": { @@ -2231,38 +2499,38 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "time": "2019-05-30T16:10:05+00:00" + "time": "2020-02-08T17:00:58+00:00" }, { "name": "symfony/routing", - "version": "v4.3.1", + "version": "v5.0.5", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "9b31cd24f6ad2cebde6845f6daa9c6d69efe2465" + "reference": "d6ca39fd05c1902bf34d724ba06fb8044a0b46de" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/9b31cd24f6ad2cebde6845f6daa9c6d69efe2465", - "reference": "9b31cd24f6ad2cebde6845f6daa9c6d69efe2465", + "url": "https://api.github.com/repos/symfony/routing/zipball/d6ca39fd05c1902bf34d724ba06fb8044a0b46de", + "reference": "d6ca39fd05c1902bf34d724ba06fb8044a0b46de", "shasum": "" }, "require": { - "php": "^7.1.3" + "php": "^7.2.5" }, "conflict": { - "symfony/config": "<4.2", - "symfony/dependency-injection": "<3.4", - "symfony/yaml": "<3.4" + "symfony/config": "<5.0", + "symfony/dependency-injection": "<4.4", + "symfony/yaml": "<4.4" }, "require-dev": { "doctrine/annotations": "~1.2", "psr/log": "~1.0", - "symfony/config": "~4.2", - "symfony/dependency-injection": "~3.4|~4.0", - "symfony/expression-language": "~3.4|~4.0", - "symfony/http-foundation": "~3.4|~4.0", - "symfony/yaml": "~3.4|~4.0" + "symfony/config": "^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/expression-language": "^4.4|^5.0", + "symfony/http-foundation": "^4.4|^5.0", + "symfony/yaml": "^4.4|^5.0" }, "suggest": { "doctrine/annotations": "For using the annotation loader", @@ -2274,7 +2542,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "5.0-dev" } }, "autoload": { @@ -2307,24 +2575,38 @@ "uri", "url" ], - "time": "2019-06-05T09:16:20+00:00" + "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": "2020-02-25T14:24:11+00:00" }, { "name": "symfony/service-contracts", - "version": "v1.1.5", + "version": "v2.0.1", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "f391a00de78ec7ec8cf5cdcdae59ec7b883edb8d" + "reference": "144c5e51266b281231e947b51223ba14acf1a749" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f391a00de78ec7ec8cf5cdcdae59ec7b883edb8d", - "reference": "f391a00de78ec7ec8cf5cdcdae59ec7b883edb8d", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/144c5e51266b281231e947b51223ba14acf1a749", + "reference": "144c5e51266b281231e947b51223ba14acf1a749", "shasum": "" }, "require": { - "php": "^7.1.3", + "php": "^7.2.5", "psr/container": "^1.0" }, "suggest": { @@ -2333,7 +2615,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -2365,46 +2647,47 @@ "interoperability", "standards" ], - "time": "2019-06-13T11:15:36+00:00" + "time": "2019-11-18T17:27:11+00:00" }, { "name": "symfony/translation", - "version": "v4.3.1", + "version": "v5.0.5", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "5dda505e5f65d759741dfaf4e54b36010a4b57aa" + "reference": "e9b93f42a1fd6aec6a0872d59ee5c8219a7d584b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/5dda505e5f65d759741dfaf4e54b36010a4b57aa", - "reference": "5dda505e5f65d759741dfaf4e54b36010a4b57aa", + "url": "https://api.github.com/repos/symfony/translation/zipball/e9b93f42a1fd6aec6a0872d59ee5c8219a7d584b", + "reference": "e9b93f42a1fd6aec6a0872d59ee5c8219a7d584b", "shasum": "" }, "require": { - "php": "^7.1.3", + "php": "^7.2.5", "symfony/polyfill-mbstring": "~1.0", - "symfony/translation-contracts": "^1.1.2" + "symfony/translation-contracts": "^2" }, "conflict": { - "symfony/config": "<3.4", - "symfony/dependency-injection": "<3.4", - "symfony/yaml": "<3.4" + "symfony/config": "<4.4", + "symfony/dependency-injection": "<5.0", + "symfony/http-kernel": "<5.0", + "symfony/twig-bundle": "<5.0", + "symfony/yaml": "<4.4" }, "provide": { - "symfony/translation-implementation": "1.0" + "symfony/translation-implementation": "2.0" }, "require-dev": { "psr/log": "~1.0", - "symfony/config": "~3.4|~4.0", - "symfony/console": "~3.4|~4.0", - "symfony/dependency-injection": "~3.4|~4.0", - "symfony/finder": "~2.8|~3.0|~4.0", - "symfony/http-kernel": "~3.4|~4.0", - "symfony/intl": "~3.4|~4.0", - "symfony/service-contracts": "^1.1.2", - "symfony/var-dumper": "~3.4|~4.0", - "symfony/yaml": "~3.4|~4.0" + "symfony/config": "^4.4|^5.0", + "symfony/console": "^4.4|^5.0", + "symfony/dependency-injection": "^5.0", + "symfony/finder": "^4.4|^5.0", + "symfony/http-kernel": "^5.0", + "symfony/intl": "^4.4|^5.0", + "symfony/service-contracts": "^1.1.2|^2", + "symfony/yaml": "^4.4|^5.0" }, "suggest": { "psr/log-implementation": "To use logging capability in translator", @@ -2414,7 +2697,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "5.0-dev" } }, "autoload": { @@ -2441,24 +2724,38 @@ ], "description": "Symfony Translation Component", "homepage": "https://symfony.com", - "time": "2019-06-03T20:27:40+00:00" + "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": "2020-02-04T07:41:34+00:00" }, { "name": "symfony/translation-contracts", - "version": "v1.1.5", + "version": "v2.0.1", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "cb4b18ad7b92a26e83b65dde940fab78339e6f3c" + "reference": "8cc682ac458d75557203b2f2f14b0b92e1c744ed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/cb4b18ad7b92a26e83b65dde940fab78339e6f3c", - "reference": "cb4b18ad7b92a26e83b65dde940fab78339e6f3c", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/8cc682ac458d75557203b2f2f14b0b92e1c744ed", + "reference": "8cc682ac458d75557203b2f2f14b0b92e1c744ed", "shasum": "" }, "require": { - "php": "^7.1.3" + "php": "^7.2.5" }, "suggest": { "symfony/translation-implementation": "" @@ -2466,7 +2763,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -2498,36 +2795,35 @@ "interoperability", "standards" ], - "time": "2019-06-13T11:15:36+00:00" + "time": "2019-11-18T17:27:11+00:00" }, { "name": "symfony/var-dumper", - "version": "v4.3.1", + "version": "v5.0.5", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "f974f448154928d2b5fb7c412bd23b81d063f34b" + "reference": "3a37aeb1132d1035536d3d6aa9cb06c2ff9355e9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/f974f448154928d2b5fb7c412bd23b81d063f34b", - "reference": "f974f448154928d2b5fb7c412bd23b81d063f34b", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/3a37aeb1132d1035536d3d6aa9cb06c2ff9355e9", + "reference": "3a37aeb1132d1035536d3d6aa9cb06c2ff9355e9", "shasum": "" }, "require": { - "php": "^7.1.3", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php72": "~1.5" + "php": "^7.2.5", + "symfony/polyfill-mbstring": "~1.0" }, "conflict": { - "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0", - "symfony/console": "<3.4" + "phpunit/phpunit": "<5.4.3", + "symfony/console": "<4.4" }, "require-dev": { "ext-iconv": "*", - "symfony/console": "~3.4|~4.0", - "symfony/process": "~3.4|~4.0", - "twig/twig": "~1.34|~2.4" + "symfony/console": "^4.4|^5.0", + "symfony/process": "^4.4|^5.0", + "twig/twig": "^2.4|^3.0" }, "suggest": { "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", @@ -2540,7 +2836,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "5.0-dev" } }, "autoload": { @@ -2574,25 +2870,27 @@ "debug", "dump" ], - "time": "2019-06-05T02:08:12+00:00" + "time": "2020-02-26T22:30:10+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", - "version": "2.2.1", + "version": "2.2.2", "source": { "type": "git", "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", - "reference": "0ed4a2ea4e0902dac0489e6436ebcd5bbcae9757" + "reference": "dda2ee426acd6d801d5b7fd1001cde9b5f790e15" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/0ed4a2ea4e0902dac0489e6436ebcd5bbcae9757", - "reference": "0ed4a2ea4e0902dac0489e6436ebcd5bbcae9757", + "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/dda2ee426acd6d801d5b7fd1001cde9b5f790e15", + "reference": "dda2ee426acd6d801d5b7fd1001cde9b5f790e15", "shasum": "" }, "require": { + "ext-dom": "*", + "ext-libxml": "*", "php": "^5.5 || ^7.0", - "symfony/css-selector": "^2.7 || ^3.0 || ^4.0" + "symfony/css-selector": "^2.7 || ^3.0 || ^4.0 || ^5.0" }, "require-dev": { "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" @@ -2621,74 +2919,157 @@ ], "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", - "time": "2017-11-27T11:13:29+00:00" + "time": "2019-10-24T08:53:34+00:00" + }, + { + "name": "vlucas/phpdotenv", + "version": "v4.1.2", + "source": { + "type": "git", + "url": "https://github.com/vlucas/phpdotenv.git", + "reference": "939dfda2d7267ac8fc53ac3d642b5de357554c39" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/939dfda2d7267ac8fc53ac3d642b5de357554c39", + "reference": "939dfda2d7267ac8fc53ac3d642b5de357554c39", + "shasum": "" + }, + "require": { + "php": "^5.5.9 || ^7.0", + "phpoption/phpoption": "^1.7.2", + "symfony/polyfill-ctype": "^1.9" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.3", + "ext-filter": "*", + "phpunit/phpunit": "^4.8.35 || ^5.0 || ^6.0 || ^7.0" + }, + "suggest": { + "ext-filter": "Required to use the boolean validator." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.1-dev" + } + }, + "autoload": { + "psr-4": { + "Dotenv\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "graham@alt-three.com", + "homepage": "https://gjcampbell.co.uk/" + }, + { + "name": "Vance Lucas", + "email": "vance@vancelucas.com", + "homepage": "https://vancelucas.com/" + } + ], + "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", + "keywords": [ + "dotenv", + "env", + "environment" + ], + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv", + "type": "tidelift" + } + ], + "time": "2020-03-12T13:44:15+00:00" }, { - "name": "vlucas/phpdotenv", - "version": "v3.4.0", + "name": "voku/portable-ascii", + "version": "1.4.10", "source": { "type": "git", - "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "5084b23845c24dbff8ac6c204290c341e4776c92" + "url": "https://github.com/voku/portable-ascii.git", + "reference": "240e93829a5f985fab0984a6e55ae5e26b78a334" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/5084b23845c24dbff8ac6c204290c341e4776c92", - "reference": "5084b23845c24dbff8ac6c204290c341e4776c92", + "url": "https://api.github.com/repos/voku/portable-ascii/zipball/240e93829a5f985fab0984a6e55ae5e26b78a334", + "reference": "240e93829a5f985fab0984a6e55ae5e26b78a334", "shasum": "" }, "require": { - "php": "^5.4 || ^7.0", - "phpoption/phpoption": "^1.5", - "symfony/polyfill-ctype": "^1.9" + "php": ">=7.0.0" }, "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.0 || ^6.0" + "phpunit/phpunit": "~6.0 || ~7.0" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } + "suggest": { + "ext-intl": "Use Intl for transliterator_transliterate() support" }, + "type": "library", "autoload": { "psr-4": { - "Dotenv\\": "src/" + "voku\\": "src/voku/", + "voku\\tests\\": "tests/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Vance Lucas", - "email": "vance@vancelucas.com", - "homepage": "http://www.vancelucas.com" + "name": "Lars Moelleken", + "homepage": "http://www.moelleken.org/" } ], - "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", + "description": "Portable ASCII library - performance optimized (ascii) string functions for php.", + "homepage": "https://github.com/voku/portable-ascii", "keywords": [ - "dotenv", - "env", - "environment" + "ascii", + "clean", + "php" + ], + "funding": [ + { + "url": "https://www.paypal.me/moelleken", + "type": "custom" + }, + { + "url": "https://github.com/voku", + "type": "github" + }, + { + "url": "https://www.patreon.com/voku", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/voku/portable-ascii", + "type": "tidelift" + } ], - "time": "2019-06-15T22:40:20+00:00" + "time": "2020-03-13T01:23:26+00:00" } ], "packages-dev": [ { "name": "doctrine/instantiator", - "version": "1.2.0", + "version": "1.3.0", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "a2c590166b2133a4633738648b6b064edae0814a" + "reference": "ae466f726242e637cebdd526a7d991b9433bacf1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/a2c590166b2133a4633738648b6b064edae0814a", - "reference": "a2c590166b2133a4633738648b6b064edae0814a", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/ae466f726242e637cebdd526a7d991b9433bacf1", + "reference": "ae466f726242e637cebdd526a7d991b9433bacf1", "shasum": "" }, "require": { @@ -2731,20 +3112,20 @@ "constructor", "instantiate" ], - "time": "2019-03-17T17:37:11+00:00" + "time": "2019-10-21T16:45:58+00:00" }, { "name": "fzaninotto/faker", - "version": "v1.8.0", + "version": "v1.9.1", "source": { "type": "git", "url": "https://github.com/fzaninotto/Faker.git", - "reference": "f72816b43e74063c8b10357394b6bba8cb1c10de" + "reference": "fc10d778e4b84d5bd315dad194661e091d307c6f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/f72816b43e74063c8b10357394b6bba8cb1c10de", - "reference": "f72816b43e74063c8b10357394b6bba8cb1c10de", + "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/fc10d778e4b84d5bd315dad194661e091d307c6f", + "reference": "fc10d778e4b84d5bd315dad194661e091d307c6f", "shasum": "" }, "require": { @@ -2753,12 +3134,12 @@ "require-dev": { "ext-intl": "*", "phpunit/phpunit": "^4.8.35 || ^5.7", - "squizlabs/php_codesniffer": "^1.5" + "squizlabs/php_codesniffer": "^2.9.2" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.8-dev" + "dev-master": "1.9-dev" } }, "autoload": { @@ -2781,48 +3162,50 @@ "faker", "fixtures" ], - "time": "2018-07-12T10:23:15+00:00" + "time": "2019-12-12T13:22:17+00:00" }, { "name": "guzzlehttp/guzzle", - "version": "6.3.3", + "version": "6.5.2", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba" + "reference": "43ece0e75098b7ecd8d13918293029e555a50f82" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/407b0cb880ace85c9b63c5f9551db498cb2d50ba", - "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/43ece0e75098b7ecd8d13918293029e555a50f82", + "reference": "43ece0e75098b7ecd8d13918293029e555a50f82", "shasum": "" }, "require": { + "ext-json": "*", "guzzlehttp/promises": "^1.0", - "guzzlehttp/psr7": "^1.4", + "guzzlehttp/psr7": "^1.6.1", "php": ">=5.5" }, "require-dev": { "ext-curl": "*", "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", - "psr/log": "^1.0" + "psr/log": "^1.1" }, "suggest": { + "ext-intl": "Required for Internationalized Domain Name (IDN) support", "psr/log": "Required for using the Log middleware" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "6.3-dev" + "dev-master": "6.5-dev" } }, "autoload": { - "files": [ - "src/functions_include.php" - ], "psr-4": { "GuzzleHttp\\": "src/" - } + }, + "files": [ + "src/functions_include.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -2846,7 +3229,7 @@ "rest", "web service" ], - "time": "2018-04-22T15:46:56+00:00" + "time": "2019-12-23T11:57:10+00:00" }, { "name": "guzzlehttp/promises", @@ -2901,33 +3284,37 @@ }, { "name": "guzzlehttp/psr7", - "version": "1.5.2", + "version": "1.6.1", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "9f83dded91781a01c63574e387eaa769be769115" + "reference": "239400de7a173fe9901b9ac7c06497751f00727a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/9f83dded91781a01c63574e387eaa769be769115", - "reference": "9f83dded91781a01c63574e387eaa769be769115", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/239400de7a173fe9901b9ac7c06497751f00727a", + "reference": "239400de7a173fe9901b9ac7c06497751f00727a", "shasum": "" }, "require": { "php": ">=5.4.0", "psr/http-message": "~1.0", - "ralouphie/getallheaders": "^2.0.5" + "ralouphie/getallheaders": "^2.0.5 || ^3.0.0" }, "provide": { "psr/http-message-implementation": "1.0" }, "require-dev": { + "ext-zlib": "*", "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8" }, + "suggest": { + "zendframework/zend-httphandlerrunner": "Emit PSR-7 responses" + }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.5-dev" + "dev-master": "1.6-dev" } }, "autoload": { @@ -2964,7 +3351,7 @@ "uri", "url" ], - "time": "2018-12-04T20:46:45+00:00" + "time": "2019-07-01T23:21:34+00:00" }, { "name": "hamcrest/hamcrest-php", @@ -3016,16 +3403,16 @@ }, { "name": "mockery/mockery", - "version": "1.2.2", + "version": "1.3.1", "source": { "type": "git", "url": "https://github.com/mockery/mockery.git", - "reference": "0eb0b48c3f07b3b89f5169ce005b7d05b18cf1d2" + "reference": "f69bbde7d7a75d6b2862d9ca8fab1cd28014b4be" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mockery/mockery/zipball/0eb0b48c3f07b3b89f5169ce005b7d05b18cf1d2", - "reference": "0eb0b48c3f07b3b89f5169ce005b7d05b18cf1d2", + "url": "https://api.github.com/repos/mockery/mockery/zipball/f69bbde7d7a75d6b2862d9ca8fab1cd28014b4be", + "reference": "f69bbde7d7a75d6b2862d9ca8fab1cd28014b4be", "shasum": "" }, "require": { @@ -3039,7 +3426,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.3.x-dev" } }, "autoload": { @@ -3077,20 +3464,20 @@ "test double", "testing" ], - "time": "2019-02-13T09:37:52+00:00" + "time": "2019-12-26T09:49:15+00:00" }, { "name": "myclabs/deep-copy", - "version": "1.9.1", + "version": "1.9.5", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "e6828efaba2c9b79f4499dae1d66ef8bfa7b2b72" + "reference": "b2c28789e80a97badd14145fda39b545d83ca3ef" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/e6828efaba2c9b79f4499dae1d66ef8bfa7b2b72", - "reference": "e6828efaba2c9b79f4499dae1d66ef8bfa7b2b72", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/b2c28789e80a97badd14145fda39b545d83ca3ef", + "reference": "b2c28789e80a97badd14145fda39b545d83ca3ef", "shasum": "" }, "require": { @@ -3125,33 +3512,33 @@ "object", "object graph" ], - "time": "2019-04-07T13:18:21+00:00" + "time": "2020-01-17T21:11:47+00:00" }, { "name": "orchestra/testbench", - "version": "v3.8.3", + "version": "v5.1.0", "source": { "type": "git", "url": "https://github.com/orchestral/testbench.git", - "reference": "171b29bb9dbd754dc1eb8d9ba0ff05b914b8db1d" + "reference": "e36bdb5fc599495f46a8b2fd3a5e6ffed044e095" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/orchestral/testbench/zipball/171b29bb9dbd754dc1eb8d9ba0ff05b914b8db1d", - "reference": "171b29bb9dbd754dc1eb8d9ba0ff05b914b8db1d", + "url": "https://api.github.com/repos/orchestral/testbench/zipball/e36bdb5fc599495f46a8b2fd3a5e6ffed044e095", + "reference": "e36bdb5fc599495f46a8b2fd3a5e6ffed044e095", "shasum": "" }, "require": { - "laravel/framework": "~5.8.19", - "mockery/mockery": "^1.0", - "orchestra/testbench-core": "~3.8.4", - "php": ">=7.1", - "phpunit/phpunit": "^7.5 || ^8.0" + "laravel/framework": "^7.1", + "mockery/mockery": "^1.3.1", + "orchestra/testbench-core": "^5.1", + "php": ">=7.2.5", + "phpunit/phpunit": "^8.4 || ^9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.8-dev" + "dev-master": "6.0-dev" } }, "notification-url": "https://packagist.org/downloads/", @@ -3175,43 +3562,54 @@ "orchestral", "testing" ], - "time": "2019-05-29T23:14:15+00:00" + "funding": [ + { + "url": "https://paypal.me/crynobone", + "type": "custom" + }, + { + "url": "https://www.patreon.com/crynobone", + "type": "patreon" + } + ], + "time": "2020-03-10T17:14:11+00:00" }, { "name": "orchestra/testbench-core", - "version": "v3.8.5", + "version": "v5.1.1", "source": { "type": "git", "url": "https://github.com/orchestral/testbench-core.git", - "reference": "b81c24ef1036cb1f8ff0ca711535cea3f0281848" + "reference": "69ddd365c01bb90b89edd9c52e44d0dc5bbc0854" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/orchestral/testbench-core/zipball/b81c24ef1036cb1f8ff0ca711535cea3f0281848", - "reference": "b81c24ef1036cb1f8ff0ca711535cea3f0281848", + "url": "https://api.github.com/repos/orchestral/testbench-core/zipball/69ddd365c01bb90b89edd9c52e44d0dc5bbc0854", + "reference": "69ddd365c01bb90b89edd9c52e44d0dc5bbc0854", "shasum": "" }, "require": { - "fzaninotto/faker": "^1.4", - "php": ">=7.1" + "fzaninotto/faker": "^1.9.1", + "php": ">=7.2.5" }, "require-dev": { - "laravel/framework": "~5.8.3", + "laravel/framework": "^7.1", "laravel/laravel": "dev-master", - "mockery/mockery": "^1.0", - "phpunit/phpunit": "^7.5 || ^8.0" + "mockery/mockery": "^1.3.1", + "orchestra/canvas": "^5.0", + "phpunit/phpunit": "^8.4 || ^9.0" }, "suggest": { - "laravel/framework": "Required for testing (~5.8.19).", - "mockery/mockery": "Allow to use Mockery for testing (^1.0).", - "orchestra/testbench-browser-kit": "Allow to use legacy Laravel BrowserKit for testing (^3.8).", - "orchestra/testbench-dusk": "Allow to use Laravel Dusk for testing (^3.8).", - "phpunit/phpunit": "Allow to use PHPUnit for testing (^7.5 || ^8.0)." + "laravel/framework": "Required for testing (^7.1).", + "mockery/mockery": "Allow using Mockery for testing (^1.3.1).", + "orchestra/testbench-browser-kit": "Allow using legacy Laravel BrowserKit for testing (^5.0).", + "orchestra/testbench-dusk": "Allow using Laravel Dusk for testing (^5.0).", + "phpunit/phpunit": "Allow using PHPUnit for testing (^8.4 || ^9.0)." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.8-dev" + "dev-master": "5.0-dev" } }, "autoload": { @@ -3240,25 +3638,35 @@ "orchestral", "testing" ], - "time": "2019-06-10T08:29:56+00:00" + "funding": [ + { + "url": "https://paypal.me/crynobone", + "type": "custom" + }, + { + "url": "https://www.patreon.com/crynobone", + "type": "patreon" + } + ], + "time": "2020-03-16T04:35:18+00:00" }, { "name": "padosoft/test", - "version": "1.0.1", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/padosoft/test.git", - "reference": "706925db87a398fed2c99e93e79148e51690da4f" + "reference": "9cc59cbef8eed7bba78f063a9e7551618e5d9b13" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/padosoft/test/zipball/706925db87a398fed2c99e93e79148e51690da4f", - "reference": "706925db87a398fed2c99e93e79148e51690da4f", + "url": "https://api.github.com/repos/padosoft/test/zipball/9cc59cbef8eed7bba78f063a9e7551618e5d9b13", + "reference": "9cc59cbef8eed7bba78f063a9e7551618e5d9b13", "shasum": "" }, "require": { "guzzlehttp/guzzle": "~6.0", - "phpunit/phpunit": "^4.0|^5.0|^6.0|^7.0" + "phpunit/phpunit": "^8.0|^9.0" }, "type": "library", "autoload": { @@ -3283,7 +3691,7 @@ "keywords": [ "test" ], - "time": "2018-10-23T08:38:17+00:00" + "time": "2020-03-24T10:26:30+00:00" }, { "name": "phar-io/manifest", @@ -3389,35 +3797,33 @@ }, { "name": "phpdocumentor/reflection-common", - "version": "1.0.1", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6" + "reference": "63a995caa1ca9e5590304cd845c15ad6d482a62a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", - "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/63a995caa1ca9e5590304cd845c15ad6d482a62a", + "reference": "63a995caa1ca9e5590304cd845c15ad6d482a62a", "shasum": "" }, "require": { - "php": ">=5.5" + "php": ">=7.1" }, "require-dev": { - "phpunit/phpunit": "^4.6" + "phpunit/phpunit": "~6" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "2.x-dev" } }, "autoload": { "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src" - ] + "phpDocumentor\\Reflection\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -3439,44 +3845,42 @@ "reflection", "static analysis" ], - "time": "2017-09-11T18:02:19+00:00" + "time": "2018-08-07T13:53:10+00:00" }, { "name": "phpdocumentor/reflection-docblock", - "version": "4.3.1", + "version": "5.1.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "bdd9f737ebc2a01c06ea7ff4308ec6697db9b53c" + "reference": "cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/bdd9f737ebc2a01c06ea7ff4308ec6697db9b53c", - "reference": "bdd9f737ebc2a01c06ea7ff4308ec6697db9b53c", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e", + "reference": "cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e", "shasum": "" }, "require": { - "php": "^7.0", - "phpdocumentor/reflection-common": "^1.0.0", - "phpdocumentor/type-resolver": "^0.4.0", - "webmozart/assert": "^1.0" + "ext-filter": "^7.1", + "php": "^7.2", + "phpdocumentor/reflection-common": "^2.0", + "phpdocumentor/type-resolver": "^1.0", + "webmozart/assert": "^1" }, "require-dev": { - "doctrine/instantiator": "~1.0.5", - "mockery/mockery": "^1.0", - "phpunit/phpunit": "^6.4" + "doctrine/instantiator": "^1", + "mockery/mockery": "^1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.x-dev" + "dev-master": "5.x-dev" } }, "autoload": { "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src/" - ] + "phpDocumentor\\Reflection\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -3487,44 +3891,46 @@ { "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.", - "time": "2019-04-30T17:48:53+00:00" + "time": "2020-02-22T12:28:44+00:00" }, { "name": "phpdocumentor/type-resolver", - "version": "0.4.0", + "version": "1.1.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7" + "reference": "7462d5f123dfc080dfdf26897032a6513644fc95" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7", - "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/7462d5f123dfc080dfdf26897032a6513644fc95", + "reference": "7462d5f123dfc080dfdf26897032a6513644fc95", "shasum": "" }, "require": { - "php": "^5.5 || ^7.0", - "phpdocumentor/reflection-common": "^1.0" + "php": "^7.2", + "phpdocumentor/reflection-common": "^2.0" }, "require-dev": { - "mockery/mockery": "^0.9.4", - "phpunit/phpunit": "^5.2||^4.8.24" + "ext-tokenizer": "^7.2", + "mockery/mockery": "~1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.x-dev" } }, "autoload": { "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src/" - ] + "phpDocumentor\\Reflection\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -3537,37 +3943,38 @@ "email": "me@mikevanriel.com" } ], - "time": "2017-07-14T14:27:02+00:00" + "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", + "time": "2020-02-18T18:59:58+00:00" }, { "name": "phpspec/prophecy", - "version": "1.8.1", + "version": "v1.10.3", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "1927e75f4ed19131ec9bcc3b002e07fb1173ee76" + "reference": "451c3cd1418cf640de218914901e51b064abb093" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/1927e75f4ed19131ec9bcc3b002e07fb1173ee76", - "reference": "1927e75f4ed19131ec9bcc3b002e07fb1173ee76", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093", + "reference": "451c3cd1418cf640de218914901e51b064abb093", "shasum": "" }, "require": { "doctrine/instantiator": "^1.0.2", "php": "^5.3|^7.0", - "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0", - "sebastian/comparator": "^1.1|^2.0|^3.0", - "sebastian/recursion-context": "^1.0|^2.0|^3.0" + "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0", + "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0", + "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0" }, "require-dev": { - "phpspec/phpspec": "^2.5|^3.2", + "phpspec/phpspec": "^2.5 || ^3.2", "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.8.x-dev" + "dev-master": "1.10.x-dev" } }, "autoload": { @@ -3600,44 +4007,45 @@ "spy", "stub" ], - "time": "2019-06-13T12:50:23+00:00" + "time": "2020-03-05T15:02:03+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "6.1.4", + "version": "8.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "807e6013b00af69b6c5d9ceb4282d0393dbb9d8d" + "reference": "31e94ccc084025d6abee0585df533eb3a792b96a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/807e6013b00af69b6c5d9ceb4282d0393dbb9d8d", - "reference": "807e6013b00af69b6c5d9ceb4282d0393dbb9d8d", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/31e94ccc084025d6abee0585df533eb3a792b96a", + "reference": "31e94ccc084025d6abee0585df533eb3a792b96a", "shasum": "" }, "require": { "ext-dom": "*", "ext-xmlwriter": "*", - "php": "^7.1", - "phpunit/php-file-iterator": "^2.0", - "phpunit/php-text-template": "^1.2.1", - "phpunit/php-token-stream": "^3.0", - "sebastian/code-unit-reverse-lookup": "^1.0.1", - "sebastian/environment": "^3.1 || ^4.0", - "sebastian/version": "^2.0.1", - "theseer/tokenizer": "^1.1" + "php": "^7.3", + "phpunit/php-file-iterator": "^3.0", + "phpunit/php-text-template": "^2.0", + "phpunit/php-token-stream": "^4.0", + "sebastian/code-unit-reverse-lookup": "^2.0", + "sebastian/environment": "^5.0", + "sebastian/version": "^3.0", + "theseer/tokenizer": "^1.1.3" }, "require-dev": { - "phpunit/phpunit": "^7.0" + "phpunit/phpunit": "^9.0" }, "suggest": { - "ext-xdebug": "^2.6.0" + "ext-pcov": "*", + "ext-xdebug": "*" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "6.1-dev" + "dev-master": "8.0-dev" } }, "autoload": { @@ -3663,32 +4071,32 @@ "testing", "xunit" ], - "time": "2018-10-31T16:06:48+00:00" + "time": "2020-02-19T13:41:19+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "2.0.2", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "050bedf145a257b1ff02746c31894800e5122946" + "reference": "354d4a5faa7449a377a18b94a2026ca3415e3d7a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/050bedf145a257b1ff02746c31894800e5122946", - "reference": "050bedf145a257b1ff02746c31894800e5122946", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/354d4a5faa7449a377a18b94a2026ca3415e3d7a", + "reference": "354d4a5faa7449a377a18b94a2026ca3415e3d7a", "shasum": "" }, "require": { - "php": "^7.1" + "php": "^7.3" }, "require-dev": { - "phpunit/phpunit": "^7.1" + "phpunit/phpunit": "^9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -3713,26 +4121,84 @@ "filesystem", "iterator" ], - "time": "2018-09-13T20:33:42+00:00" + "time": "2020-02-07T06:05:22+00:00" + }, + { + "name": "phpunit/php-invoker", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "7579d5a1ba7f3ac11c80004d205877911315ae7a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/7579d5a1ba7f3ac11c80004d205877911315ae7a", + "reference": "7579d5a1ba7f3ac11c80004d205877911315ae7a", + "shasum": "" + }, + "require": { + "php": "^7.3" + }, + "require-dev": { + "ext-pcntl": "*", + "phpunit/phpunit": "^9.0" + }, + "suggest": { + "ext-pcntl": "*" + }, + "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": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", + "keywords": [ + "process" + ], + "time": "2020-02-07T06:06:11+00:00" }, { "name": "phpunit/php-text-template", - "version": "1.2.1", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" + "reference": "526dc996cc0ebdfa428cd2dfccd79b7b53fee346" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/526dc996cc0ebdfa428cd2dfccd79b7b53fee346", + "reference": "526dc996cc0ebdfa428cd2dfccd79b7b53fee346", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^7.3" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, "autoload": { "classmap": [ "src/" @@ -3754,32 +4220,32 @@ "keywords": [ "template" ], - "time": "2015-06-21T13:50:34+00:00" + "time": "2020-02-01T07:43:44+00:00" }, { "name": "phpunit/php-timer", - "version": "2.1.2", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "1038454804406b0b5f5f520358e78c1c2f71501e" + "reference": "4118013a4d0f97356eae8e7fb2f6c6472575d1df" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/1038454804406b0b5f5f520358e78c1c2f71501e", - "reference": "1038454804406b0b5f5f520358e78c1c2f71501e", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/4118013a4d0f97356eae8e7fb2f6c6472575d1df", + "reference": "4118013a4d0f97356eae8e7fb2f6c6472575d1df", "shasum": "" }, "require": { - "php": "^7.1" + "php": "^7.3" }, "require-dev": { - "phpunit/phpunit": "^7.0" + "phpunit/phpunit": "^9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.1-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -3803,33 +4269,33 @@ "keywords": [ "timer" ], - "time": "2019-06-07T04:22:29+00:00" + "time": "2020-02-07T06:08:11+00:00" }, { "name": "phpunit/php-token-stream", - "version": "3.0.1", + "version": "4.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "c99e3be9d3e85f60646f152f9002d46ed7770d18" + "reference": "b2560a0c33f7710e4d7f8780964193e8e8f8effe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/c99e3be9d3e85f60646f152f9002d46ed7770d18", - "reference": "c99e3be9d3e85f60646f152f9002d46ed7770d18", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/b2560a0c33f7710e4d7f8780964193e8e8f8effe", + "reference": "b2560a0c33f7710e4d7f8780964193e8e8f8effe", "shasum": "" }, "require": { "ext-tokenizer": "*", - "php": "^7.1" + "php": "^7.3" }, "require-dev": { - "phpunit/phpunit": "^7.0" + "phpunit/phpunit": "^9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -3852,57 +4318,56 @@ "keywords": [ "tokenizer" ], - "time": "2018-10-30T05:52:18+00:00" + "time": "2020-02-07T06:19:00+00:00" }, { "name": "phpunit/phpunit", - "version": "7.5.13", + "version": "9.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "b9278591caa8630127f96c63b598712b699e671c" + "reference": "68d7e5b17a6b9461e17c00446caa409863154f76" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/b9278591caa8630127f96c63b598712b699e671c", - "reference": "b9278591caa8630127f96c63b598712b699e671c", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/68d7e5b17a6b9461e17c00446caa409863154f76", + "reference": "68d7e5b17a6b9461e17c00446caa409863154f76", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.1", + "doctrine/instantiator": "^1.2.0", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", "ext-mbstring": "*", "ext-xml": "*", - "myclabs/deep-copy": "^1.7", - "phar-io/manifest": "^1.0.2", - "phar-io/version": "^2.0", - "php": "^7.1", - "phpspec/prophecy": "^1.7", - "phpunit/php-code-coverage": "^6.0.7", - "phpunit/php-file-iterator": "^2.0.1", - "phpunit/php-text-template": "^1.2.1", - "phpunit/php-timer": "^2.1", - "sebastian/comparator": "^3.0", - "sebastian/diff": "^3.0", - "sebastian/environment": "^4.0", - "sebastian/exporter": "^3.1", - "sebastian/global-state": "^2.0", - "sebastian/object-enumerator": "^3.0.3", - "sebastian/resource-operations": "^2.0", - "sebastian/version": "^2.0.1" - }, - "conflict": { - "phpunit/phpunit-mock-objects": "*" + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.9.1", + "phar-io/manifest": "^1.0.3", + "phar-io/version": "^2.0.1", + "php": "^7.3", + "phpspec/prophecy": "^1.8.1", + "phpunit/php-code-coverage": "^8.0", + "phpunit/php-file-iterator": "^3.0", + "phpunit/php-invoker": "^3.0", + "phpunit/php-text-template": "^2.0", + "phpunit/php-timer": "^3.0", + "sebastian/comparator": "^4.0", + "sebastian/diff": "^4.0", + "sebastian/environment": "^5.0", + "sebastian/exporter": "^4.0", + "sebastian/global-state": "^4.0", + "sebastian/object-enumerator": "^4.0", + "sebastian/resource-operations": "^3.0", + "sebastian/type": "^2.0", + "sebastian/version": "^3.0" }, "require-dev": { "ext-pdo": "*" }, "suggest": { "ext-soap": "*", - "ext-xdebug": "*", - "phpunit/php-invoker": "^2.0" + "ext-xdebug": "*" }, "bin": [ "phpunit" @@ -3910,12 +4375,15 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "7.5-dev" + "dev-master": "9.0-dev" } }, "autoload": { "classmap": [ "src/" + ], + "files": [ + "src/Framework/Assert/Functions.php" ] }, "notification-url": "https://packagist.org/downloads/", @@ -3936,7 +4404,7 @@ "testing", "xunit" ], - "time": "2019-06-19T12:01:51+00:00" + "time": "2020-02-13T07:30:12+00:00" }, { "name": "psr/http-message", @@ -3990,24 +4458,24 @@ }, { "name": "ralouphie/getallheaders", - "version": "2.0.5", + "version": "3.0.3", "source": { "type": "git", "url": "https://github.com/ralouphie/getallheaders.git", - "reference": "5601c8a83fbba7ef674a7369456d12f1e0d0eafa" + "reference": "120b605dfeb996808c31b6477290a714d356e822" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/5601c8a83fbba7ef674a7369456d12f1e0d0eafa", - "reference": "5601c8a83fbba7ef674a7369456d12f1e0d0eafa", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", "shasum": "" }, "require": { - "php": ">=5.3" + "php": ">=5.6" }, "require-dev": { - "phpunit/phpunit": "~3.7.0", - "satooshi/php-coveralls": ">=1.0" + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" }, "type": "library", "autoload": { @@ -4026,32 +4494,32 @@ } ], "description": "A polyfill for getallheaders.", - "time": "2016-02-11T07:05:27+00:00" + "time": "2019-03-08T08:55:37+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", - "version": "1.0.1", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18" + "reference": "5b5dbe0044085ac41df47e79d34911a15b96d82e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", - "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/5b5dbe0044085ac41df47e79d34911a15b96d82e", + "reference": "5b5dbe0044085ac41df47e79d34911a15b96d82e", "shasum": "" }, "require": { - "php": "^5.6 || ^7.0" + "php": "^7.3" }, "require-dev": { - "phpunit/phpunit": "^5.7 || ^6.0" + "phpunit/phpunit": "^9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -4071,34 +4539,34 @@ ], "description": "Looks up which function or method a line of code belongs to", "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", - "time": "2017-03-04T06:30:41+00:00" + "time": "2020-02-07T06:20:13+00:00" }, { "name": "sebastian/comparator", - "version": "3.0.2", + "version": "4.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da" + "reference": "85b3435da967696ed618ff745f32be3ff4a2b8e8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/5de4fc177adf9bce8df98d8d141a7559d7ccf6da", - "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/85b3435da967696ed618ff745f32be3ff4a2b8e8", + "reference": "85b3435da967696ed618ff745f32be3ff4a2b8e8", "shasum": "" }, "require": { - "php": "^7.1", - "sebastian/diff": "^3.0", - "sebastian/exporter": "^3.1" + "php": "^7.3", + "sebastian/diff": "^4.0", + "sebastian/exporter": "^4.0" }, "require-dev": { - "phpunit/phpunit": "^7.1" + "phpunit/phpunit": "^9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -4111,6 +4579,10 @@ "BSD-3-Clause" ], "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, { "name": "Jeff Welch", "email": "whatthejeff@gmail.com" @@ -4122,10 +4594,6 @@ { "name": "Bernhard Schussek", "email": "bschussek@2bepublished.at" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" } ], "description": "Provides the functionality to compare PHP values for equality", @@ -4135,33 +4603,33 @@ "compare", "equality" ], - "time": "2018-07-12T15:12:46+00:00" + "time": "2020-02-07T06:08:51+00:00" }, { "name": "sebastian/diff", - "version": "3.0.2", + "version": "4.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29" + "reference": "c0c26c9188b538bfa985ae10c9f05d278f12060d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/720fcc7e9b5cf384ea68d9d930d480907a0c1a29", - "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/c0c26c9188b538bfa985ae10c9f05d278f12060d", + "reference": "c0c26c9188b538bfa985ae10c9f05d278f12060d", "shasum": "" }, "require": { - "php": "^7.1" + "php": "^7.3" }, "require-dev": { - "phpunit/phpunit": "^7.5 || ^8.0", - "symfony/process": "^2 || ^3.3 || ^4" + "phpunit/phpunit": "^9.0", + "symfony/process": "^4 || ^5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -4174,13 +4642,13 @@ "BSD-3-Clause" ], "authors": [ - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - }, { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" } ], "description": "Diff implementation", @@ -4191,27 +4659,27 @@ "unidiff", "unified diff" ], - "time": "2019-02-04T06:01:07+00:00" + "time": "2020-02-07T06:09:38+00:00" }, { "name": "sebastian/environment", - "version": "4.2.2", + "version": "5.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "f2a2c8e1c97c11ace607a7a667d73d47c19fe404" + "reference": "9bffdefa7810031a165ddd6275da6a2c1f6f2dfb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/f2a2c8e1c97c11ace607a7a667d73d47c19fe404", - "reference": "f2a2c8e1c97c11ace607a7a667d73d47c19fe404", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/9bffdefa7810031a165ddd6275da6a2c1f6f2dfb", + "reference": "9bffdefa7810031a165ddd6275da6a2c1f6f2dfb", "shasum": "" }, "require": { - "php": "^7.1" + "php": "^7.3" }, "require-dev": { - "phpunit/phpunit": "^7.5" + "phpunit/phpunit": "^9.0" }, "suggest": { "ext-posix": "*" @@ -4219,7 +4687,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.2-dev" + "dev-master": "5.0-dev" } }, "autoload": { @@ -4244,34 +4712,34 @@ "environment", "hhvm" ], - "time": "2019-05-05T09:05:15+00:00" + "time": "2020-02-19T13:40:20+00:00" }, { "name": "sebastian/exporter", - "version": "3.1.0", + "version": "4.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "234199f4528de6d12aaa58b612e98f7d36adb937" + "reference": "80c26562e964016538f832f305b2286e1ec29566" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/234199f4528de6d12aaa58b612e98f7d36adb937", - "reference": "234199f4528de6d12aaa58b612e98f7d36adb937", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/80c26562e964016538f832f305b2286e1ec29566", + "reference": "80c26562e964016538f832f305b2286e1ec29566", "shasum": "" }, "require": { - "php": "^7.0", - "sebastian/recursion-context": "^3.0" + "php": "^7.3", + "sebastian/recursion-context": "^4.0" }, "require-dev": { "ext-mbstring": "*", - "phpunit/phpunit": "^6.0" + "phpunit/phpunit": "^9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1.x-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -4284,6 +4752,10 @@ "BSD-3-Clause" ], "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, { "name": "Jeff Welch", "email": "whatthejeff@gmail.com" @@ -4292,17 +4764,13 @@ "name": "Volker Dusch", "email": "github@wallbash.com" }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, { "name": "Adam Harvey", "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" } ], "description": "Provides the functionality to export PHP variables for visualization", @@ -4311,27 +4779,30 @@ "export", "exporter" ], - "time": "2017-04-03T13:19:02+00:00" + "time": "2020-02-07T06:10:52+00:00" }, { "name": "sebastian/global-state", - "version": "2.0.0", + "version": "4.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4" + "reference": "bdb1e7c79e592b8c82cb1699be3c8743119b8a72" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", - "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bdb1e7c79e592b8c82cb1699be3c8743119b8a72", + "reference": "bdb1e7c79e592b8c82cb1699be3c8743119b8a72", "shasum": "" }, "require": { - "php": "^7.0" + "php": "^7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" }, "require-dev": { - "phpunit/phpunit": "^6.0" + "ext-dom": "*", + "phpunit/phpunit": "^9.0" }, "suggest": { "ext-uopz": "*" @@ -4339,7 +4810,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -4362,34 +4833,34 @@ "keywords": [ "global state" ], - "time": "2017-04-27T15:39:26+00:00" + "time": "2020-02-07T06:11:37+00:00" }, { "name": "sebastian/object-enumerator", - "version": "3.0.3", + "version": "4.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5" + "reference": "e67516b175550abad905dc952f43285957ef4363" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/7cfd9e65d11ffb5af41198476395774d4c8a84c5", - "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/e67516b175550abad905dc952f43285957ef4363", + "reference": "e67516b175550abad905dc952f43285957ef4363", "shasum": "" }, "require": { - "php": "^7.0", - "sebastian/object-reflector": "^1.1.1", - "sebastian/recursion-context": "^3.0" + "php": "^7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" }, "require-dev": { - "phpunit/phpunit": "^6.0" + "phpunit/phpunit": "^9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0.x-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -4409,32 +4880,32 @@ ], "description": "Traverses array structures and object graphs to enumerate all referenced objects", "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "time": "2017-08-03T12:35:26+00:00" + "time": "2020-02-07T06:12:23+00:00" }, { "name": "sebastian/object-reflector", - "version": "1.1.1", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "773f97c67f28de00d397be301821b06708fca0be" + "reference": "f4fd0835cabb0d4a6546d9fe291e5740037aa1e7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/773f97c67f28de00d397be301821b06708fca0be", - "reference": "773f97c67f28de00d397be301821b06708fca0be", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/f4fd0835cabb0d4a6546d9fe291e5740037aa1e7", + "reference": "f4fd0835cabb0d4a6546d9fe291e5740037aa1e7", "shasum": "" }, "require": { - "php": "^7.0" + "php": "^7.3" }, "require-dev": { - "phpunit/phpunit": "^6.0" + "phpunit/phpunit": "^9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -4454,32 +4925,32 @@ ], "description": "Allows reflection of object attributes, including inherited and non-public ones", "homepage": "https://github.com/sebastianbergmann/object-reflector/", - "time": "2017-03-29T09:07:27+00:00" + "time": "2020-02-07T06:19:40+00:00" }, { "name": "sebastian/recursion-context", - "version": "3.0.0", + "version": "4.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8" + "reference": "cdd86616411fc3062368b720b0425de10bd3d579" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", - "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cdd86616411fc3062368b720b0425de10bd3d579", + "reference": "cdd86616411fc3062368b720b0425de10bd3d579", "shasum": "" }, "require": { - "php": "^7.0" + "php": "^7.3" }, "require-dev": { - "phpunit/phpunit": "^6.0" + "phpunit/phpunit": "^9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0.x-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -4492,14 +4963,14 @@ "BSD-3-Clause" ], "authors": [ - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, { "name": "Adam Harvey", "email": "aharvey@php.net" @@ -4507,29 +4978,32 @@ ], "description": "Provides functionality to recursively process PHP variables", "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "time": "2017-03-03T06:23:57+00:00" + "time": "2020-02-07T06:18:20+00:00" }, { "name": "sebastian/resource-operations", - "version": "2.0.1", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9" + "reference": "8c98bf0dfa1f9256d0468b9803a1e1df31b6fa98" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/4d7a795d35b889bf80a0cc04e08d77cedfa917a9", - "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/8c98bf0dfa1f9256d0468b9803a1e1df31b6fa98", + "reference": "8c98bf0dfa1f9256d0468b9803a1e1df31b6fa98", "shasum": "" }, "require": { - "php": "^7.1" + "php": "^7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -4549,29 +5023,75 @@ ], "description": "Provides a list of PHP built-in functions that operate on resources", "homepage": "https://www.github.com/sebastianbergmann/resource-operations", - "time": "2018-10-04T04:07:39+00:00" + "time": "2020-02-07T06:13:02+00:00" + }, + { + "name": "sebastian/type", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "9e8f42f740afdea51f5f4e8cec2035580e797ee1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/9e8f42f740afdea51f5f4e8cec2035580e797ee1", + "reference": "9e8f42f740afdea51f5f4e8cec2035580e797ee1", + "shasum": "" + }, + "require": { + "php": "^7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" + }, + "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": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", + "time": "2020-02-07T06:13:43+00:00" }, { "name": "sebastian/version", - "version": "2.0.1", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/version.git", - "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" + "reference": "0411bde656dce64202b39c2f4473993a9081d39e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", - "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/0411bde656dce64202b39c2f4473993a9081d39e", + "reference": "0411bde656dce64202b39c2f4473993a9081d39e", "shasum": "" }, "require": { - "php": ">=5.6" + "php": "^7.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -4592,7 +5112,7 @@ ], "description": "Library that helps with managing the version number of Git-hosted PHP projects", "homepage": "https://github.com/sebastianbergmann/version", - "time": "2016-10-03T07:35:21+00:00" + "time": "2020-01-21T06:36:37+00:00" }, { "name": "theseer/tokenizer", @@ -4636,32 +5156,29 @@ }, { "name": "webmozart/assert", - "version": "1.4.0", + "version": "1.7.0", "source": { "type": "git", "url": "https://github.com/webmozart/assert.git", - "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9" + "reference": "aed98a490f9a8f78468232db345ab9cf606cf598" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/83e253c8e0be5b0257b881e1827274667c5c17a9", - "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9", + "url": "https://api.github.com/repos/webmozart/assert/zipball/aed98a490f9a8f78468232db345ab9cf606cf598", + "reference": "aed98a490f9a8f78468232db345ab9cf606cf598", "shasum": "" }, "require": { "php": "^5.3.3 || ^7.0", "symfony/polyfill-ctype": "^1.8" }, + "conflict": { + "vimeo/psalm": "<3.6.0" + }, "require-dev": { - "phpunit/phpunit": "^4.6", - "sebastian/version": "^1.0.1" + "phpunit/phpunit": "^4.8.36 || ^7.5.13" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.3-dev" - } - }, "autoload": { "psr-4": { "Webmozart\\Assert\\": "src/" @@ -4683,7 +5200,7 @@ "check", "validate" ], - "time": "2018-12-25T11:19:39+00:00" + "time": "2020-02-14T12:15:55+00:00" } ], "aliases": [], @@ -4694,5 +5211,6 @@ "platform": { "php": ">=7.1.0" }, - "platform-dev": [] + "platform-dev": [], + "plugin-api-version": "1.1.0" } diff --git a/src/UploadOptions.php b/src/UploadOptions.php index 71b4329..99926c7 100644 --- a/src/UploadOptions.php +++ b/src/UploadOptions.php @@ -3,7 +3,6 @@ namespace Padosoft\Uploadable; use Illuminate\Support\Facades\Storage; -use Padosoft\Io\DirHelper; class UploadOptions { @@ -66,7 +65,7 @@ class UploadOptions * default: public * @var string */ - public $storageDiskName = 'local'; + public $storageDiskName = 'public'; /** * An associative array of 'attribute_name' => 'uploadBasePath' @@ -173,14 +172,14 @@ public function setMimeType(array $mime): UploadOptions } /** - * upload base path. + * upload base path. path relative to $storageDiskName root folder * Ex.: public/upload/news * @param string $path * @return UploadOptions */ public function setUploadBasePath(string $path): UploadOptions { - $this->uploadBasePath = DirHelper::canonicalize($path); + $this->uploadBasePath = canonicalize($path); return $this; } @@ -188,7 +187,7 @@ public function setUploadBasePath(string $path): UploadOptions /** * An associative array of 'attribute_name' => 'uploadBasePath' * set an attribute name here to override its default upload base path - * The path is absolute or relative to public_folder() folder. + * The path is relative to $storageDiskName root folder. * Ex.: * public $uploadPaths = ['image' => 'product', 'image_thumb' => 'product/thumb']; * @param array $attributesPaths @@ -197,7 +196,7 @@ public function setUploadBasePath(string $path): UploadOptions public function setUploadPaths(array $attributesPaths): UploadOptions { array_map(function ($v) { - return $v == '' ? $v : DirHelper::canonicalize($v); + return $v == '' ? $v : canonicalize($v); }, $attributesPaths); $this->uploadPaths = $attributesPaths; @@ -243,6 +242,6 @@ public function getUploadOptionsDefault(): UploadOptions ]) ->setUploadBasePath( 'upload/') ->setUploadPaths([]) - ->setStorageDisk(''); + ->setStorageDisk('public'); } } diff --git a/src/Uploadable.php b/src/Uploadable.php index 9b6ddb6..b5ea409 100644 --- a/src/Uploadable.php +++ b/src/Uploadable.php @@ -8,10 +8,6 @@ use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Storage; use Illuminate\Support\Facades\URL; -use Padosoft\Io\DirHelper; -use Padosoft\Io\FileHelper; -use Padosoft\Laravel\Request\RequestHelper; -use Padosoft\Laravel\Request\UploadedFileHelper; use Padosoft\Uploadable\Events\UploadDeleteExecuted; use Padosoft\Uploadable\Events\UploadExecuted; @@ -133,7 +129,7 @@ public function getUploadOptionsOrDefault() : UploadOptions */ public function guardAgainstInvalidUploadOptions() { - if (!count($this->uploadOptions->uploads)) { + if (!is_array($this->uploadOptions->uploads) || count($this->uploadOptions->uploads)<1) { throw InvalidOption::missingUploadFields(); } if ($this->uploadOptions->uploadBasePath === null || $this->uploadOptions->uploadBasePath == '') { @@ -153,6 +149,7 @@ public function uploadFiles() //loop for every upload model attributes and do upload if has a file in request foreach ($this->getUploadsAttributesSafe() as $uploadField) { + $this->uploadFile($uploadField); } } @@ -164,14 +161,14 @@ public function uploadFiles() public function uploadFile(string $uploadField) { //check if there is a valid file in request for current attribute - if (!RequestHelper::isValidCurrentRequestUploadFile($uploadField, + if (!isValidCurrentRequestUploadFile($uploadField, $this->getUploadOptionsOrDefault()->uploadsMimeType) ) { return; } //retrive the uploaded file - $uploadedFile = RequestHelper::getCurrentRequestFileSafe($uploadField); + $uploadedFile = getCurrentRequestFileSafe($uploadField); if ($uploadedFile === null) { return; } @@ -208,7 +205,7 @@ public function doUpload(UploadedFile $uploadedFile, $uploadAttribute) : string $pathToStore = $this->getUploadFileBasePath($uploadAttribute); //delete if file already exists - $newFile = DirHelper::njoin($pathToStore, $newName); + $newFile = njoin($pathToStore, $newName); if($this->getUploadOptionsOrDefault()->storage->exists($newFile)){ $this->getUploadOptionsOrDefault()->storage->delete($newFile); } @@ -235,7 +232,7 @@ public function doUpload(UploadedFile $uploadedFile, $uploadAttribute) : string public function requestHasValidFilesAndCorrectPaths() : bool { //current request has not uploaded files - if (!RequestHelper::currentRequestHasFiles()) { + if (!currentRequestHasFiles()) { return false; } @@ -282,7 +279,7 @@ public function calcolateNewUploadFileName(UploadedFile $uploadedFile) : string } //retrive original file name and extension - $filenameWithoutExtension = UploadedFileHelper::getFilenameWithoutExtension($uploadedFile); + $filenameWithoutExtension = getUploadedFilenameWithoutExtension($uploadedFile); $ext = $uploadedFile->getClientOriginalExtension(); $newName = $filenameWithoutExtension . $this->getUploadOptionsOrDefault()->uploadFileNameSuffixSeparator . $this->id . '.' . $ext; @@ -318,7 +315,7 @@ public function deleteUploadedFile(string $uploadField) $uploadFieldPath = $this->getUploadFileBasePath($uploadField); //unlink file - $path = DirHelper::njoin($uploadFieldPath, $this->{$uploadField}); + $path = njoin($uploadFieldPath, $this->{$uploadField}); if(!$this->getUploadOptionsOrDefault()->storage->delete($path)){ Log::error('Error when Uploadable.deleteUploadedFile() try to delete file:'.$path); } @@ -425,7 +422,7 @@ public function checkOrCreateUploadBasePath(string $uploadField) : bool public function getUploadFileBasePath(string $uploadField) : string { //default model upload path - $uploadFieldPath = DirHelper::canonicalize($this->getUploadOptionsOrDefault()->uploadBasePath); + $uploadFieldPath = canonicalize($this->getUploadOptionsOrDefault()->uploadBasePath); //overwrite if there is specific path for the field $specificPath = $this->getUploadFileBasePathSpecific($uploadField); @@ -464,7 +461,7 @@ public function getUploadFileBasePathSpecific(string $uploadField) : string //if path is relative, nothing to do because all is relative to storage disk root path - return DirHelper::canonicalize($path); + return canonicalize($path); } /** @@ -492,7 +489,7 @@ function getUploadFileFullPath( ) : string { $uploadFieldPath = $this->getUploadFileBasePath($uploadField); - $uploadFieldPath = DirHelper::canonicalize(DirHelper::addFinalSlash($uploadFieldPath) . $this->{$uploadField}); + $uploadFieldPath = canonicalize($this->getUploadOptionsOrDefault()->storage->path(addFinalSlash($uploadFieldPath) . $this->{$uploadField})); if ($this->isSlashOrEmptyDir($uploadFieldPath)) { return ''; @@ -513,7 +510,7 @@ function getUploadFileUrl( string $uploadField ) : string { - $url = $this->getUploadFileFullPath($uploadField); + $url = addFinalSlash($this->getUploadFileBasePath($uploadField)). $this->{$uploadField}; return $url == '' ? '' : $this->getUploadOptionsOrDefault()->storage->url($url); } @@ -531,7 +528,7 @@ function removePublicPath( if ($path == '') { return ''; } - $len = strpos($path, '/'); + $len = strpos($path, DIRECTORY_SEPARATOR); if ($len === false) { return ''; } @@ -556,14 +553,14 @@ function getUploadFileBaseUrl( ) : string { $uploadFieldPath = $this->getUploadFileBasePath($uploadField); - - $uploadFieldPath = DirHelper::canonicalize(DirHelper::addFinalSlash($this->removePublicPath($uploadFieldPath))); + /*dump($uploadFieldPath); + $uploadFieldPath = canonicalize(addFinalSlash($this->removePublicPath($uploadFieldPath)));*/ if ($this->isSlashOrEmptyDir($uploadFieldPath)) { return ''; } - return $this->getUploadOptionsOrDefault()->storage->url($uploadFieldPath); + return addFinalSlash($this->getUploadOptionsOrDefault()->storage->url($uploadFieldPath)); } /** @@ -590,7 +587,7 @@ function generateNewUploadFileNameAndSetAttribute( } //generate new file name - $uploadedFile = RequestHelper::getCurrentRequestFileSafe($uploadField); + $uploadedFile = getCurrentRequestFileSafe($uploadField); if ($uploadedFile === null) { return; } @@ -663,6 +660,6 @@ function checkIfNeedToDeleteOldFile( $oldValue = $this->getOriginal($uploadField); - $this->getUploadOptionsOrDefault()->storage->delete(DirHelper::njoin($this->getUploadFileBasePath($uploadField), $oldValue)); + $this->getUploadOptionsOrDefault()->storage->delete(njoin($this->getUploadFileBasePath($uploadField), $oldValue)); } } diff --git a/src/helpers.php b/src/helpers.php new file mode 100644 index 0000000..0290700 --- /dev/null +++ b/src/helpers.php @@ -0,0 +1,389 @@ +getClientOriginalName()); + } +} +if (!function_exists('currentRequestHasFiles')) { + /** + * Check if the current request has at least one file + * @return bool + */ + function currentRequestHasFiles(): bool + { + return requestHasFiles(request()); + } +} + +if (!function_exists('requestHasFiles')) { + /** + * Check if the passed request has at least one file + * + * @param \Illuminate\Http\Request $request + * + * @return bool + */ + function requestHasFiles(\Illuminate\Http\Request $request): bool + { + return ($request && $request->allFiles() && count($request->allFiles()) > 0); + } + +} +if (!function_exists('hasValidMimeType')) { + /** + * Check if uploaded File has a correct MimeType if specified. + * If $arrMimeType is empty array return true. + * + * @param \Illuminate\Http\UploadedFile $uploadedFile + * @param array $arrMimeType + * + * @return bool + */ + function hasValidMimeType(\Illuminate\Http\UploadedFile $uploadedFile, array $arrMimeType): bool + { + return count($arrMimeType) > 0 ? in_array($uploadedFile->getMimeType(), $arrMimeType) : true; + } +} +if (!function_exists('getCurrentRequestFileSafe')) { + /** + * Return File in Current Request if ok, otherwise return null + * + * @param string $uploadField + * + * @return array|null|\Illuminate\Http\UploadedFile|\Illuminate\Http\UploadedFile[] + */ + function getCurrentRequestFileSafe(string $uploadField) + { + return getRequestFileSafe($uploadField, request()); + } +} +if (!function_exists('getRequestFileSafe')) { + /** + * Return File in passed request if ok, otherwise return null + * + * @param string $uploadField + * @param \Illuminate\Http\Request $request + * + * @return array|null|\Illuminate\Http\UploadedFile|\Illuminate\Http\UploadedFile[] + */ + function getRequestFileSafe( + string $uploadField, + \Illuminate\Http\Request $request + ) { + if (!$request) { + return null; + } + + $uploadedFile = $request->file($uploadField); + + //check type because request file method, may returns UploadedFile, array or null + if (!is_a($uploadedFile, \Illuminate\Http\UploadedFile::class)) { + return null; + } + + return $uploadedFile; + } +} +if (!function_exists('isValidUploadFile')) { + /** + * Check if uploaded File is valid and + * has a valid Mime Type (only if $arrMimeType is not empty array). + * Return true is all ok, otherwise return false. + * + * @param \Illuminate\Http\UploadedFile $uploadedFile + * @param array $arrMimeType + * + * @return bool + */ + function isValidUploadFile(\Illuminate\Http\UploadedFile $uploadedFile, array $arrMimeType = array()): bool + { + if (empty($uploadedFile) || !$uploadedFile->isValid()) { + return false; + } + + return hasValidMimeType($uploadedFile, $arrMimeType); + } +} +if (!function_exists('hasValidUploadFile')) { + /** + * Check if uploaded File is valid and has a valid Mime Type. + * Return true is all ok, otherwise return false. + * + * @param string $uploadField + * @param array $arrMimeType + * @param \Illuminate\Http\Request $request + * + * @return bool + */ + function hasValidUploadFile( + string $uploadField, + \Illuminate\Http\Request $request, + array $arrMimeType = array() + ): bool { + $uploadedFile = getRequestFileSafe($uploadField, $request); + + if (!is_a($uploadedFile, \Illuminate\Http\UploadedFile::class)) { + return false; + } + + return isValidUploadFile($uploadedFile, $arrMimeType); + } +} +if (!function_exists('isValidCurrentRequestUploadFile')) { + /** + * Check if uploaded File in current request is valid and has a valid Mime Type. + * Return true is all ok, otherwise return false. + * + * @param string $uploadField + * @param array $arrMimeType + * + * @return bool + */ + function isValidCurrentRequestUploadFile(string $uploadField, array $arrMimeType = array()): bool + { + return hasValidUploadFile($uploadField, request(), $arrMimeType); + } +} +if (!function_exists('addFinalSlash')) { + /** + * If dir passed, check if finishes with '/' otherwise append a slash to path. + * If wrong or empty string passed, return '/'. + * + * @param string $path + * + * @return string + */ + function addFinalSlash(string $path): string + { + if ($path === null || $path == '') { + return '/'; + } + + $quoted = preg_quote('/', '/'); + $path = preg_replace('/(?:' . $quoted . ')+$/', '', $path) . '/'; + + return $path; + } +} +if (!function_exists('removeStartSlash')) { + /** + * Remove start slash ('/') char in dir if starts with slash. + * + * @param string $directory + * + * @return string + */ + function removeStartSlash($directory): string + { + if (\Illuminate\Support\Str::startsWith($directory, '/')) { + $directory = substr($directory, 1); + } + + return $directory; + } +} +if (!function_exists('removeFinalSlash')) { + /** + * Remove final slash ('/') char in dir if ends with slash. + * + * @param $directory + * + * @return string + */ + function removeFinalSlash($directory): string + { + if (\Illuminate\Support\Str::endsWith($directory, '/')) { + $directory = substr($directory, 0, -1); + } + + return $directory; + } +} +if (!function_exists('njoin')) { + /** + * Joins a split file system path. + * + * @param array|string + * + * @return string + * @see https://github.com/laradic/support/blob/master/src/Path.php + */ + function joinPath(): string + { + $paths = func_get_args(); + if (func_num_args() === 1 && is_array($paths[0])) { + $paths = $paths[0]; + } + foreach ($paths as $key => &$argument) { + if (is_array($argument)) { + $argument = join($argument); + } + $argument = removeFinalSlash($argument); + if ($key > 0) { + $argument = removeStartSlash($argument); + } + } + + return implode(DIRECTORY_SEPARATOR, $paths); + } +} +if (!function_exists('njoin')) { + /** + * Similar to the joinPath() method, but also normalize()'s the result + * + * @param string|array + * + * @return string + * @see https://github.com/laradic/support/blob/master/src/Path.php + */ + function njoin(): string + { + return canonicalize(joinPath(func_get_args())); + } +} +if (!function_exists('collapseDotFolder')) { + /** + * Collapse dot folder '.', '..', if possible + * + * @param string $root + * @param $part + * @param $canonicalParts + */ + function collapseDotFolder($root, $part, &$canonicalParts): void + { + if ('.' === $part) { + return; + } + // Collapse ".." with the previous part, if one exists + // Don't collapse ".." if the previous part is also ".." + if ('..' === $part && count($canonicalParts) > 0 + && '..' !== $canonicalParts[count($canonicalParts) - 1] + ) { + array_pop($canonicalParts); + + return; + } + // Only add ".." prefixes for relative paths + if ('..' !== $part || '' === $root) { + $canonicalParts[] = $part; + } + } +} +if (!function_exists('splitDir')) { + /** + * Splits a part into its root directory and the remainder. + * + * If the path has no root directory, an empty root directory will be + * returned. + * + * If the root directory is a Windows style partition, the resulting root + * will always contain a trailing slash. + * + * list ($root, $path) = DirHelpersplit("C:/webmozart") + * // => array("C:/", "webmozart") + * + * list ($root, $path) = DirHelpersplit("C:") + * // => array("C:/", "") + * + * @param string $path The canonical path to split + * + * @return string[] An array with the root directory and the remaining relative + * path + * @see https://github.com/laradic/support/blob/master/src/Path.php + */ + function splitDir($path) + { + if ('' === $path) { + return ['', '']; + } + $root = ''; + $length = strlen($path); + // Remove and remember root directory + if ('/' === $path[0]) { + $root = '/'; + $path = $length > 1 ? substr($path, 1) : ''; + } elseif ($length > 1 && ctype_alpha($path[0]) && ':' === $path[1]) { + if (2 === $length) { + // Windows special case: "C:" + $root = $path . '/'; + $path = ''; + } elseif ('/' === $path[2]) { + // Windows normal case: "C:/".. + $root = substr($path, 0, 3); + $path = $length > 3 ? substr($path, 3) : ''; + } + } + return [$root, $path]; + } +} +if (!function_exists('canonicalize')) { + /** + * Canonicalizes the given path. + * + * During normalization, all slashes are replaced by forward slashes ("/"). + * Furthermore, all "." and ".." segments are removed as far as possible. + * ".." segments at the beginning of relative paths are not removed. + * + * ```php + * echo DirHelper::canonicalize("\webmozart\puli\..\css\style.css"); + * // => /webmozart/style.css + * + * echo DirHelper::canonicalize("../css/./style.css"); + * // => ../css/style.css + * ``` + * + * This method is able to deal with both UNIX and Windows paths. + * + * @param string $path A path string + * + * @return string The canonical path + * @see https://github.com/laradic/support/blob/master/src/Path.php + */ + function canonicalize($path): string + { + $path = (string)$path; + if ('' === $path) { + return ''; + } + $path = str_replace('\\', '/', $path); + list ($root, $path) = splitDir($path); + $parts = array_filter(explode('/', $path), 'strlen'); + $canonicalParts = []; + // Collapse dot folder ., .., i f possible + foreach ($parts as $part) { + collapseDotFolder($root, $part, $canonicalParts); + } + + // Add the root directory again + return $root . implode('/', $canonicalParts); + } +} diff --git a/tests/Integration/RequestTestable.php b/tests/Integration/RequestTestable.php new file mode 100644 index 0000000..3576dbb --- /dev/null +++ b/tests/Integration/RequestTestable.php @@ -0,0 +1,93 @@ +getRequestForTest($uri, $method, $parameters, $cookies, $files, $server, $content); + + //bind request istance and facade to this class + $this->bindRequestForTest($request); + + //return the request + return $request; + } + + /** + * @param \Illuminate\Http\Request $request + */ + public function bindRequestForTest(\Illuminate\Http\Request $request) + { + //bind request istance to this class + $this->app->instance(Request::class, $request); + //bind request facade to this istance + $this->app->instance('request', $request); + } + + /** + * Get request for upload file and bind. + * Usefull for testing upload. + * @param array $arrUploadedFiles are in the form ['image' => $UploadFile1, 'file' => $UploadFile2,....] + * where $UploadFile1 and $uploadFile2 are istance of \Illuminate\Http\UploadedFile. + * @return \Illuminate\Http\Request + */ + public function getRequestAndBindItForUploadTest(array $arrUploadedFiles) : \Illuminate\Http\Request + { + //create request with uploaded files + return $this->getRequestAndBindItForTest('/', 'POST', [], [], $arrUploadedFiles); + } +} diff --git a/tests/Integration/TestCase.php b/tests/Integration/TestCase.php index ccc101d..9e9a4b0 100644 --- a/tests/Integration/TestCase.php +++ b/tests/Integration/TestCase.php @@ -8,7 +8,6 @@ use Orchestra\Testbench\TestCase as Orchestra; use Padosoft\Test\traits\ExceptionTestable; use Padosoft\Test\traits\FileSystemTestable; -use Padosoft\Laravel\Request\UploadedFileTestable; abstract class TestCase extends Orchestra diff --git a/tests/Integration/TestModel.php b/tests/Integration/TestModel.php index 2d7f10e..85d9d53 100644 --- a/tests/Integration/TestModel.php +++ b/tests/Integration/TestModel.php @@ -27,7 +27,7 @@ public function getUploadOptions() : UploadOptions } $this->uploadOptions = UploadOptions::create()->getUploadOptionsDefault() - ->setUploadBasePath(public_path('upload/' . $this->getTable())) + ->setUploadBasePath('upload/' . $this->getTable()) ->setUploadsAttributes(['image', 'image_mobile']); return $this->uploadOptions; diff --git a/tests/Integration/UploadOptionsTest.php b/tests/Integration/UploadOptionsTest.php index 9f0d371..cf80d35 100644 --- a/tests/Integration/UploadOptionsTest.php +++ b/tests/Integration/UploadOptionsTest.php @@ -3,7 +3,6 @@ namespace Padosoft\Uploadable\Test\Integration; use Orchestra\Testbench\TestCase as Orchestra; -use Padosoft\Io\DirHelper; use Padosoft\Uploadable\UploadOptions; class UploadOptionsTest extends Orchestra @@ -13,7 +12,8 @@ public function getUploadOptionsDefaultTest() { $obj = UploadOptions::create()->getUploadOptionsDefault(); $this->assertEquals(true, $obj->appendModelIdSuffixInUploadedFileName); - $this->assertEquals(DirHelper::canonicalize(public_path('upload/')), $obj->uploadBasePath); + $this->assertEquals('upload', $obj->uploadBasePath); + $this->assertEquals(canonicalize(storage_path('app/public/upload/')), canonicalize($obj->storage->path($obj->uploadBasePath))); $this->assertEquals('0755', $obj->uploadCreateDirModeMask); $this->assertEquals('_', $obj->uploadFileNameSuffixSeparator); $this->assertEquals([], $obj->uploadPaths); @@ -34,7 +34,7 @@ public function all_setUploadOptionsTest() ->setMimeType(['image/bmp','text/plain']) ; $this->assertEquals(false, $obj->appendModelIdSuffixInUploadedFileName); - $this->assertEquals(DirHelper::canonicalize(public_path('upload2')), $obj->uploadBasePath); + $this->assertEquals(canonicalize(public_path('upload2')), $obj->uploadBasePath); $this->assertEquals('0777', $obj->uploadCreateDirModeMask); $this->assertEquals('-', $obj->uploadFileNameSuffixSeparator); $this->assertEquals(['image2' => public_path('upload').'/image2', 'image_mobile2' => public_path('upload').'/image_mobile2'], $obj->uploadPaths); diff --git a/tests/Integration/UploadableTest.php b/tests/Integration/UploadableTest.php index 8bf3b00..83568a6 100644 --- a/tests/Integration/UploadableTest.php +++ b/tests/Integration/UploadableTest.php @@ -4,14 +4,16 @@ use Illuminate\Http\UploadedFile; use Illuminate\Support\Facades\Request; +use Illuminate\Support\Facades\Storage; use Illuminate\Support\Facades\URL; use League\Flysystem\Directory; -use Padosoft\Io\DirHelper; -use Padosoft\Io\FileHelper; use Padosoft\Uploadable\UploadOptions; -use Padosoft\Laravel\Request\RequestHelper; use Padosoft\Uploadable\InvalidOption; -use Padosoft\Laravel\Request\RequestTestable; + +function is_uploaded_file($tmpName): bool +{ + return strpos($tmpName,'dummy')!==false; +} class UploadableTest extends TestCase { @@ -28,17 +30,17 @@ public function dummy_test() $uploadedFile = $this->getUploadedFileForTestAndCopyInSysTempDir(__DIR__ . '/resources/dummy.txt'); $this->assertFileExists($this->getSysTempDirectory() . '/dummy.txt'); - $request = Request::create('/', 'GET', [], [], ['image' => $uploadedFile]); - $result = RequestHelper::getFileSafe('image', $request); + $result = getRequestFileSafe('image', $request); + $this->assertInstanceOf(UploadedFile::class, $result); $this->assertTrue($result->isValid()); $this->assertEquals('dummy.txt', $result->getClientOriginalName()); - $result = RequestHelper::getFileSafe('', $request); + $result = getRequestFileSafe('', $request); $this->assertNull($result); $this->app->instance(Request::class, $request); $this->app->instance('request', $request); - $result = RequestHelper::getCurrentRequestFileSafe('image'); + $result = getCurrentRequestFileSafe('image'); $this->assertInstanceOf(UploadedFile::class, $result); $this->assertTrue($result->isValid()); $this->assertEquals('dummy.txt', $result->getClientOriginalName()); @@ -52,22 +54,22 @@ public function guardAgainstInvalidUploadOptionsTest() { $model = new TestModel(); $this->expectException(InvalidOption::class); - $this->expectExceptionMessageRegExp('/^Could not determinate which fields should be/'); + $this->expectExceptionMessageMatches('/^Could not determinate which fields should be/'); $model->getUploadOptionsOrDefault()->uploads = []; $model->guardAgainstInvalidUploadOptions(); $this->expectException(InvalidOption::class); - $this->expectExceptionMessageRegExp('/^Could not determinate which fields should be/'); + $this->expectExceptionMessageMatches('/^Could not determinate which fields should be/'); $model->getUploadOptionsOrDefault()->uploads = ''; $model->guardAgainstInvalidUploadOptions(); $model->getUploadOptionsOrDefault()->uploads = 'image'; $this->expectException(InvalidOption::class); - $this->expectExceptionMessageRegExp('/^Could not determinate uploadBasePath/'); + $this->expectExceptionMessageMatches('/^Could not determinate uploadBasePath/'); $model->getUploadOptionsOrDefault()->uploadBasePath = ''; $model->guardAgainstInvalidUploadOptions(); $this->expectException(InvalidOption::class); - $this->expectExceptionMessageRegExp('/^Could not determinate uploadBasePath/'); + $this->expectExceptionMessageMatches('/^Could not determinate uploadBasePath/'); $model->getUploadOptionsOrDefault()->uploadBasePath = null; $model->guardAgainstInvalidUploadOptions(); } @@ -78,13 +80,13 @@ public function guardAgainstInvalidUploadOptionsTest() public function guardAgainstInvalidUploadBasePathOptionsTest() { $model = new TestModel(); - $model->getUploadOptionsOrDefault()->uploads = 'image'; + $model->getUploadOptionsOrDefault()->uploads = ['image']; $this->expectException(InvalidOption::class); - $this->expectExceptionMessageRegExp('/^Could not determinate uploadBasePath/'); + $this->expectExceptionMessageMatches('/^Could not determinate uploadBasePath/'); $model->getUploadOptionsOrDefault()->uploadBasePath = ''; $model->guardAgainstInvalidUploadOptions(); $this->expectException(InvalidOption::class); - $this->expectExceptionMessageRegExp('/^Could not determinate uploadBasePath/'); + $this->expectExceptionMessageMatches('/^Could not determinate uploadBasePath/'); $model->getUploadOptionsOrDefault()->uploadBasePath = null; $model->guardAgainstInvalidUploadOptions(); } @@ -157,12 +159,12 @@ public function requestHasValidFilesAndCorrectPaths() $options = $model->getUploadOptionsOrDefault(); $this->assertEquals(false, $model->requestHasValidFilesAndCorrectPaths()); - $uploadedFile = $this->getUploadedFileForTest(__DIR__ . '/resources/dummy.txt'); + /*$uploadedFile = $this->getUploadedFileForTest(__DIR__ . '/resources/dummy.txt'); $request = $this->getRequestAndBindItForUploadTest(['image' => $uploadedFile]); $model = new TestModel(); $options = $model->getUploadOptionsOrDefault(); $options->setUploadBasePath(__DIR__ . '/resources/dummy.txt'); - $this->assertEquals(false, $model->requestHasValidFilesAndCorrectPaths()); + $this->assertEquals(false, $model->requestHasValidFilesAndCorrectPaths());*/ $uploadedFile = $this->getUploadedFileForTest(__DIR__ . '/resources/dummy.txt'); $request = $this->getRequestAndBindItForUploadTest(['image' => $uploadedFile]); @@ -257,11 +259,11 @@ public function getUploadFileBasePath() $path = $this->getSysTempDirectory() . DIRECTORY_SEPARATOR . 'upload'; $model = new TestModel(); $model->getUploadOptionsOrDefault()->uploadBasePath = $path; - $this->assertEquals(DirHelper::canonicalize($path), $model->getUploadFileBasePath('image')); - @unlink(DirHelper::canonicalize($path)); + $this->assertEquals(canonicalize($path), $model->getUploadFileBasePath('image')); + @unlink(canonicalize($path)); $model->getUploadOptionsOrDefault()->uploadPaths = ['image' => 'dummy/']; - $this->assertEquals(DirHelper::canonicalize(public_path('dummy/')), $model->getUploadFileBasePath('image')); - @unlink(DirHelper::canonicalize(public_path('dummy/'))); + $this->assertEquals(canonicalize(storage_path('app/public/dummy/')), canonicalize($model->getUploadOptionsOrDefault()->storage->path($model->getUploadFileBasePath('image')))); + @unlink(canonicalize(public_path('dummy/'))); } /** @@ -272,10 +274,10 @@ public function getUploadFileBasePathSpecific() $model = new TestModel(); $this->assertEquals('', $model->getUploadFileBasePathSpecific('image')); $model->getUploadOptionsOrDefault()->uploadPaths = ['image' => 'dummy/']; - $this->assertEquals(DirHelper::canonicalize(public_path('dummy/')), - $model->getUploadFileBasePathSpecific('image')); - $model->getUploadOptionsOrDefault()->uploadPaths = ['image' => '/var/www/vhosts/dummy.com/upload/']; - $this->assertEquals('/var/www/vhosts/dummy.com/upload', $model->getUploadFileBasePathSpecific('image')); + $this->assertEquals(canonicalize(storage_path('app/public/dummy/')), + canonicalize($model->getUploadOptionsOrDefault()->storage->path($model->getUploadFileBasePath('image')))); + $model->getUploadOptionsOrDefault()->uploadPaths = ['image' => 'custom_upload/']; + $this->assertEquals(canonicalize(storage_path('app/public/custom_upload/')), canonicalize($model->getUploadOptionsOrDefault()->storage->path($model->getUploadFileBasePath('image')))); } /** @@ -285,17 +287,17 @@ public function getUploadFileFullPath() { $model = new TestModel(); $model->image = 'dummy.txt'; - $model->getUploadOptionsOrDefault()->uploadBasePath = public_path('dummy/'); - $this->assertEquals(DirHelper::canonicalize(public_path('dummy/') . $model->image), + $model->getUploadOptionsOrDefault()->uploadBasePath = 'dummy/'; + $this->assertEquals(canonicalize(storage_path('app/public/dummy/' . $model->image)), $model->getUploadFileFullPath('image')); $model->getUploadOptionsOrDefault()->uploadPaths = ['image' => 'dummy2/']; - $this->assertEquals(DirHelper::canonicalize(public_path('dummy2/') . $model->image), + $this->assertEquals(canonicalize(storage_path('app/public/dummy2/' . $model->image)), $model->getUploadFileFullPath('image')); $model->image = '/'; - $this->assertEquals(DirHelper::canonicalize(public_path('dummy2/') . $model->image), + $this->assertEquals(canonicalize(storage_path('app/public/dummy2/' . $model->image)), $model->getUploadFileFullPath('image')); $model->image = ''; - $this->assertEquals(DirHelper::canonicalize(public_path('dummy2/') . $model->image), + $this->assertEquals(canonicalize(storage_path('app/public/dummy2/' . $model->image)), $model->getUploadFileFullPath('image')); } @@ -306,10 +308,10 @@ public function getUploadFileUrl() { $model = new TestModel(); $model->image = 'dummy.txt'; - $model->getUploadOptionsOrDefault()->uploadBasePath = public_path('dummy/'); - $this->assertEquals(URL::to('dummy/' . $model->image), $model->getUploadFileUrl('image')); + $model->getUploadOptionsOrDefault()->uploadBasePath = 'dummy/'; + $this->assertEquals($model->getUploadOptionsOrDefault()->storage->url('dummy/' . $model->image), $model->getUploadFileUrl('image')); $model->getUploadOptionsOrDefault()->uploadPaths = ['image' => 'dummy2/']; - $this->assertEquals(URL::to('dummy2/' . $model->image), $model->getUploadFileUrl('image')); + $this->assertEquals($model->getUploadOptionsOrDefault()->storage->url('dummy2/' . $model->image), $model->getUploadFileUrl('image')); } /** @@ -327,15 +329,15 @@ public function isSlashOrEmptyDir() /** * @test */ - public function removePublicPath() + /*public function removePublicPath() { $model = new TestModel(); $this->assertEquals('', $model->removePublicPath('')); - $this->assertEquals('', $model->removePublicPath(public_path(''))); - $this->assertEquals('', $model->removePublicPath(public_path('/'))); - $this->assertEquals(DirHelper::canonicalize(DIRECTORY_SEPARATOR . 'upload/image'), - $model->removePublicPath(public_path('upload/image'))); - } + $this->assertEquals('', $model->removePublicPath($model->getUploadOptionsOrDefault()->storage->path(''))); + $this->assertEquals('', $model->removePublicPath($model->getUploadOptionsOrDefault()->storage->path('/'))); + $this->assertEquals(canonicalize(DIRECTORY_SEPARATOR . 'upload/image'), + $model->removePublicPath($model->getUploadOptionsOrDefault()->storage->path('upload/image'))); + }*/ /** * @test @@ -344,14 +346,15 @@ public function getUploadFileBaseUrl() { $model = new TestModel(); $model->image = 'dummy.txt'; - $model->getUploadOptionsOrDefault()->uploadBasePath = public_path('dummy/'); - $this->assertEquals(URL::to('dummy/'), $model->getUploadFileBaseUrl('image')); + $model->getUploadOptionsOrDefault()->uploadBasePath = 'dummy/'; + + $this->assertEquals($model->getUploadOptionsOrDefault()->storage->url('dummy/'), $model->getUploadFileBaseUrl('image')); $model->getUploadOptionsOrDefault()->uploadPaths = ['image' => 'dummy2/']; - $this->assertEquals(URL::to('dummy2/'), $model->getUploadFileBaseUrl('image')); + $this->assertEquals($model->getUploadOptionsOrDefault()->storage->url('dummy2/'), $model->getUploadFileBaseUrl('image')); $model->image = '/'; - $this->assertEquals(URL::to('dummy2/'), $model->getUploadFileBaseUrl('image')); + $this->assertEquals($model->getUploadOptionsOrDefault()->storage->url('dummy2/'), $model->getUploadFileBaseUrl('image')); $model->image = ''; - $this->assertEquals(URL::to('dummy2/'), $model->getUploadFileBaseUrl('image')); + $this->assertEquals($model->getUploadOptionsOrDefault()->storage->url('dummy2/'), $model->getUploadFileBaseUrl('image')); } /** @@ -495,11 +498,12 @@ public function generateNewUploadFileNameAndSetAttribute() public function uploadFilesTest() { $model = new TestModel(); + Storage::fake('dummy'); + $model->getUploadOptionsOrDefault()->setStorageDisk('dummy'); $options = $model->getUploadOptionsOrDefault(); $model->image = ''; $model->uploadFiles(); $this->assertEquals('', $model->image); - $uploadedFile = $this->getUploadedFileForTestAndCopyInSysTempDir(__DIR__ . '/resources/dummy.txt'); $uploadedFile2 = $this->getUploadedFileForTestAndCopyInSysTempDir(__DIR__ . '/resources/dummy.csv'); $options->setMimeType([ @@ -511,7 +515,7 @@ public function uploadFilesTest() 'image_mobile' => $uploadedFile2 ]); - $options->setUploadBasePath(DirHelper::njoin($this->getSysTempDirectory(), 'upload')); + $options->setUploadBasePath( 'upload'); $model->name = 'dummy.txt'; $model->image = 'dummy.txt'; $model->image_mobile = 'dummy.csv'; @@ -520,11 +524,13 @@ public function uploadFilesTest() $this->assertTrue($model->id > 0); $this->assertEquals('dummy_' . $model->id . '.txt', $model->image); $this->assertEquals('dummy_' . $model->id . '.csv', $model->image_mobile); - $this->assertFileExists(DirHelper::njoin($options->uploadBasePath, $model->image)); - $this->assertFileExists(DirHelper::njoin($options->uploadBasePath, $model->image_mobile)); - @unlink(DirHelper::njoin($options->uploadBasePath, $model->image)); - @unlink(DirHelper::njoin($options->uploadBasePath, $model->image_mobile)); - @unlink($options->uploadBasePath); + //$this->assertFileExists(njoin($options->uploadBasePath, $model->image)); + //$this->assertFileExists(njoin($options->uploadBasePath, $model->image_mobile)); + Storage::disk('dummy')->assertExists(njoin($options->uploadBasePath, $model->image)); + Storage::disk('dummy')->assertExists(njoin($options->uploadBasePath, $model->image_mobile)); + /*@unlink(njoin($options->uploadBasePath, $model->image)); + @unlink(njoin($options->uploadBasePath, $model->image_mobile)); + @unlink($options->uploadBasePath);*/ } /** @@ -533,37 +539,39 @@ public function uploadFilesTest() public function uploadFileTest() { $model = new TestModel(); + Storage::fake('dummy'); + $model->getUploadOptionsOrDefault()->setStorageDisk('dummy'); $options = $model->getUploadOptionsOrDefault(); $uploadedFile = $this->getUploadedFileForTestAndCopyInSysTempDir(__DIR__ . '/resources/dummy.txt'); $options->setMimeType([mime_content_type(__DIR__ . '/resources/dummy.txt')]); $request = $this->getRequestAndBindItForUploadTest(['image' => $uploadedFile]); - $options->setUploadBasePath(DirHelper::njoin($this->getSysTempDirectory(), 'upload')); + + $options->setUploadBasePath( 'upload'); $model->name = 'dummy.txt'; $model->image = 'dummy.txt'; $model->save(); - + //dump(Storage::disk('dummy')->get('')); $this->assertTrue($model->id > 0); $this->assertEquals('dummy_' . $model->id . '.txt', $model->image); - $this->assertFileExists(DirHelper::njoin($options->uploadBasePath, $model->image)); + Storage::disk('dummy')->assertExists(njoin($options->uploadBasePath, $model->image)); //update model and change image $model = TestModel::first(); + $model->getUploadOptionsOrDefault()->setStorageDisk('dummy'); $options = $model->getUploadOptionsOrDefault(); $uploadedFile = $this->getUploadedFileForTestAndCopyInSysTempDir(__DIR__ . '/resources/dummy.csv'); $options->setMimeType([mime_content_type(__DIR__ . '/resources/dummy.csv')]); $request = $this->getRequestAndBindItForUploadTest(['image' => $uploadedFile]); $model->name = 'dummy.csv'; $model->image = 'dummy.csv'; + $model->save(); $this->assertTrue($model->id > 0); $this->assertEquals('dummy_' . $model->id . '.csv', $model->image); - $this->assertFileExists(DirHelper::njoin($options->uploadBasePath, $model->image)); - $this->assertFileNotExists(DirHelper::njoin($options->uploadBasePath, 'dummy_' . $model->id . '.txt')); - - @unlink(DirHelper::njoin($options->uploadBasePath, $model->image)); - @unlink($options->uploadBasePath); + Storage::disk('dummy')->assertExists(njoin($options->uploadBasePath, $model->image)); + Storage::disk('dummy')->assertMissing(njoin($options->uploadBasePath, 'dummy_' . $model->id . '.txt')); } /** @@ -572,17 +580,19 @@ public function uploadFileTest() public function checkIfNeedToDeleteOldFiles() { //copy csv to tmp dir and set image property + Storage::fake('dummy'); $uploadedFile = $this->getUploadedFileForTestAndCopyInSysTempDir(__DIR__ . '/resources/dummy.csv'); $request = $this->getRequestAndBindItForUploadTest(['image' => $uploadedFile]); - $this->assertFileExists(DirHelper::njoin($this->getSysTempDirectory(), 'dummy.csv')); + $this->assertFileExists(njoin($this->getSysTempDirectory(), 'dummy.csv')); $model = new TestModel(); + $model->getUploadOptionsOrDefault()->setStorageDisk('dummy'); $options = $model->getUploadOptionsOrDefault(); - $options->setUploadBasePath(DirHelper::njoin($this->getSysTempDirectory(), 'upload')); + $options->setUploadBasePath( 'upload'); $options->setMimeType([mime_content_type(__DIR__ . '/resources/dummy.txt')]); $model->name = 'dummy.csv'; $model->image = 'dummy.csv'; $model->save(); - $this->assertFileExists(DirHelper::njoin($options->uploadBasePath, $model->image)); + Storage::disk('dummy')->assertExists(njoin($options->uploadBasePath, $model->image)); //simulate another upload that overwrite previuous file $uploadedFile = $this->getUploadedFileForTestAndCopyInSysTempDir(__DIR__ . '/resources/dummy.txt'); @@ -593,13 +603,11 @@ public function checkIfNeedToDeleteOldFiles() $model->save(); $this->assertTrue($model->id > 0); $this->assertEquals('dummy_' . $model->id . '.txt', $model->image); - $this->assertFileExists(DirHelper::njoin($options->uploadBasePath, $model->image)); - $this->assertFileNotExists(DirHelper::njoin($options->uploadBasePath, 'dummy_' . $model->id . '.csv')); + Storage::disk('dummy')->assertExists(njoin($options->uploadBasePath, $model->image)); + Storage::disk('dummy')->assertMissing(njoin($options->uploadBasePath, 'dummy_' . $model->id . '.csv')); + - @unlink(DirHelper::njoin($options->uploadBasePath, $model->image)); - @unlink(DirHelper::njoin($options->uploadBasePath, 'dummy_' . $model->id . '.csv')); - @unlink($options->uploadBasePath); } /** @@ -610,21 +618,21 @@ public function doUploadTest() //UPLOAD $uploadedFile = $this->getUploadedFileForTestAndCopyInSysTempDir(__DIR__ . '/resources/dummy.csv'); $request = $this->getRequestAndBindItForUploadTest(['image' => $uploadedFile]); - $this->assertFileExists(DirHelper::njoin($this->getSysTempDirectory(), 'dummy.csv')); + $this->assertFileExists(njoin($this->getSysTempDirectory(), 'dummy.csv')); $model = new TestModel(); + Storage::fake('dummy'); + $model->getUploadOptionsOrDefault()->setStorageDisk('dummy'); $options = $model->getUploadOptionsOrDefault(); - $options->setUploadBasePath(DirHelper::njoin($this->getSysTempDirectory(), 'upload')); + $options->setUploadBasePath( 'upload'); $options->setMimeType([mime_content_type(__DIR__ . '/resources/dummy.csv')]); $model->image = 'pippo.csv'; $newName = $model->doUpload($uploadedFile, 'image'); $this->assertTrue($newName != ''); - $this->assertFileExists(DirHelper::njoin($options->uploadBasePath, $model->image)); + Storage::disk('dummy')->assertExists(njoin($options->uploadBasePath, $model->image)); $newName = $model->doUpload($uploadedFile, ''); $this->assertEquals('', $newName); - @unlink(DirHelper::njoin($options->uploadBasePath, $model->image)); - @unlink($options->uploadBasePath); } /** @@ -633,54 +641,59 @@ public function doUploadTest() public function deleteUploadedFiles() { //UPLOAD + Storage::fake('dummy'); $uploadedFile = $this->getUploadedFileForTestAndCopyInSysTempDir(__DIR__ . '/resources/dummy.csv'); $request = $this->getRequestAndBindItForUploadTest(['image' => $uploadedFile]); - $this->assertFileExists(DirHelper::njoin($this->getSysTempDirectory(), 'dummy.csv')); + $this->assertFileExists(njoin($this->getSysTempDirectory(), 'dummy.csv')); $model = new TestModel(); + $model->getUploadOptionsOrDefault()->setStorageDisk('dummy'); $options = $model->getUploadOptionsOrDefault(); - $options->setUploadBasePath(DirHelper::njoin($this->getSysTempDirectory(), 'upload')); + $options->setUploadBasePath('upload'); $options->setMimeType([mime_content_type(__DIR__ . '/resources/dummy.csv')]); $model->name = 'dummy.csv'; $model->image = 'dummy.csv'; $model->save(); $this->assertTrue($model->id > 0); - $this->assertFileExists(DirHelper::njoin($options->uploadBasePath, $model->image)); + Storage::disk('dummy')->assertExists(njoin($options->uploadBasePath, $model->image)); //RETRIVE AND DELETE $model = TestModel::first(); + $model->getUploadOptionsOrDefault()->setStorageDisk('dummy'); $options = $model->getUploadOptionsOrDefault(); - $options->setUploadBasePath(DirHelper::njoin($this->getSysTempDirectory(), 'upload')); + $options->setUploadBasePath('upload'); $oldImage = $model->image; $model->delete(); - $this->assertFileNotExists(DirHelper::njoin($options->uploadBasePath, $oldImage)); + Storage::disk('dummy')->assertMissing(njoin($options->uploadBasePath, $oldImage)); //UPLOAD $uploadedFile = $this->getUploadedFileForTestAndCopyInSysTempDir(__DIR__ . '/resources/dummy.csv'); $request = $this->getRequestAndBindItForUploadTest(['image' => $uploadedFile]); - $this->assertFileExists(DirHelper::njoin($this->getSysTempDirectory(), 'dummy.csv')); + $this->assertFileExists(njoin($this->getSysTempDirectory(), 'dummy.csv')); $model = new TestModel(); + $model->getUploadOptionsOrDefault()->setStorageDisk('dummy'); $options = $model->getUploadOptionsOrDefault(); - $options->setUploadBasePath(DirHelper::njoin($this->getSysTempDirectory(), 'upload')); + $options->setUploadBasePath( 'upload'); $options->setMimeType([mime_content_type(__DIR__ . '/resources/dummy.csv')]); $model->name = 'dummy.csv'; $model->image = 'dummy.csv'; $model->save(); $this->assertTrue($model->id > 0); - $this->assertFileExists(DirHelper::njoin($options->uploadBasePath, $model->image)); + Storage::disk('dummy')->assertExists(njoin($options->uploadBasePath, $model->image)); //RETRIVE SET ATTRIB TO BLANK AND DELETE $model = TestModel::first(); + $model->getUploadOptionsOrDefault()->setStorageDisk('dummy'); $this->assertTrue($model->id > 0); $options = $model->getUploadOptionsOrDefault(); - $options->setUploadBasePath(DirHelper::njoin($this->getSysTempDirectory(), 'upload')); + $options->setUploadBasePath( 'upload'); //set to empty image attribute! $oldImage = $model->image; $model->image = ''; $model->delete(); - $this->assertFileNotExists(DirHelper::njoin($options->uploadBasePath, $oldImage)); + Storage::disk('dummy')->assertMissing(njoin($options->uploadBasePath, $oldImage)); - @unlink(DirHelper::njoin($options->uploadBasePath, $model->image)); - @unlink(DirHelper::njoin($options->uploadBasePath, 'dummy_' . $model->id . '.csv')); + @unlink(njoin($options->uploadBasePath, $model->image)); + @unlink(njoin($options->uploadBasePath, 'dummy_' . $model->id . '.csv')); @unlink($options->uploadBasePath); } } diff --git a/tests/Integration/UploadedFileTestable.php b/tests/Integration/UploadedFileTestable.php new file mode 100644 index 0000000..708a293 --- /dev/null +++ b/tests/Integration/UploadedFileTestable.php @@ -0,0 +1,80 @@ +assertFileExists($fullPath); + + $uploadedFile = new UploadedFile( + $fullPath, + pathinfo($fullPath, PATHINFO_BASENAME), + ($mimeType === null || $mimeType == '') ? mime_content_type($fullPath) : $mimeType, + //filesize($fullPath), + $errorCode, + true // true for test + ); + return $uploadedFile; + } + + /** + * Take $fullPath existing file, copy it to system temp dir with random name and + * Create an instance of Illuminate\Http\UploadedFile for testing (param test=true). + * Before creating UploadedFile class check if file exists with assertFileExists($fullPath). + * @param string $fullPath + * @param string $mimeType if empty try to resolve mimeType automatically. + * @param int $errorCode default 0 (no error). + * For all possible values see Symfony\Component\HttpFoundation\File\UploadedFile::getErrorMessage() + * @return UploadedFile + * @throws \Symfony\Component\HttpFoundation\File\Exception\FileException + * @throws \Symfony\Component\HttpFoundation\File\Exception\FileNotFoundException + */ + public function getUploadedFileForTestAndCopyInSysTempDir( + string $fullPath, + string $mimeType = '', + int $errorCode = 0 + ) : UploadedFile + { + $this->assertFileExists($fullPath); + + $origname = pathinfo($fullPath, PATHINFO_BASENAME); + $path = sys_get_temp_dir() . '/' . $origname; + if (file_exists($path)) { + unlink($path); + } + copy($fullPath, $path); + + $uploadedFile = $this->getUploadedFileForTest($path, $mimeType, $errorCode); + return $uploadedFile; + } +}