From e73e71b905dac8970afad3b4081816acf14f195c Mon Sep 17 00:00:00 2001 From: pieroMC98 Date: Sun, 6 Sep 2020 19:29:08 +0200 Subject: [PATCH 1/9] aggregate ORM relations --- app/Model/Buyer.php | 5 ++++- app/Model/Category.php | 3 +++ app/Model/Product.php | 25 ++++++++++++++++++++++++- app/Model/Seller.php | 4 +++- app/Model/Transaction.php | 10 +++++++++- app/Model/User.php | 18 ++++++++++++++++-- routes/api.php | 7 ++++--- 7 files changed, 63 insertions(+), 9 deletions(-) diff --git a/app/Model/Buyer.php b/app/Model/Buyer.php index 1472da9..85750d7 100644 --- a/app/Model/Buyer.php +++ b/app/Model/Buyer.php @@ -3,8 +3,11 @@ namespace App; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\HasMany; class Buyer extends Model { - // + function transaction(){ + return $this->HasMany(Transaction::class); + } } diff --git a/app/Model/Category.php b/app/Model/Category.php index c0fd482..0e8281c 100644 --- a/app/Model/Category.php +++ b/app/Model/Category.php @@ -10,4 +10,7 @@ class Category extends Model 'name', 'brief' ]; + function product(){ + return $this->belongsToMany(Product::class); + } } diff --git a/app/Model/Product.php b/app/Model/Product.php index 8dee5b2..af351f6 100644 --- a/app/Model/Product.php +++ b/app/Model/Product.php @@ -3,8 +3,31 @@ namespace App; use Illuminate\Database\Eloquent\Model; +use phpDocumentor\Reflection\Types\This; class Product extends Model { - // + const AVAILABLE = true; + const NOTAVAILABLE = false; + protected $fillable = [ + 'name', + 'brief', + 'status', + 'image', + 'seller_id' + ]; + + function is_available(){ + return $this->status == self::AVAILABLE; + } + function category(){ + return $this->belongsToMany(Category::class); + } + + function seller(){ + return $this->belongsTo(Seller::class); + } + function transaction(){ + return $this->belongsToMany(Category::class); + } } diff --git a/app/Model/Seller.php b/app/Model/Seller.php index bf84bb5..9d83e87 100644 --- a/app/Model/Seller.php +++ b/app/Model/Seller.php @@ -6,5 +6,7 @@ class Seller extends Model { - // + function product(){ + return $this->hasMany(Product::class); + } } diff --git a/app/Model/Transaction.php b/app/Model/Transaction.php index 0a188ad..ddbe3e1 100644 --- a/app/Model/Transaction.php +++ b/app/Model/Transaction.php @@ -6,5 +6,13 @@ class Transaction extends Model { - // + protected $fillable = [ + 'quantify','buyer_id','product_id' + ]; + function buyer(){ + return $this->belongsTo(Buyer::class); + } + + function product(){ return $this->belongsTo(Product::class); } } + diff --git a/app/Model/User.php b/app/Model/User.php index e79dab7..286b846 100644 --- a/app/Model/User.php +++ b/app/Model/User.php @@ -9,14 +9,18 @@ class User extends Authenticatable { use Notifiable; + const USER_VERIFIED = true; + const USER_NOT_VERIFIED = false; + const ISADMIN = true; /** * The attributes that are mass assignable. * * @var array */ protected $fillable = [ - 'name', 'email', 'password', + 'name', 'email', 'password','verirified','verification_token','admin' + ]; /** @@ -25,7 +29,7 @@ class User extends Authenticatable * @var array */ protected $hidden = [ - 'password', 'remember_token', + 'password', 'remember_token','verification_token' ]; /** @@ -36,4 +40,14 @@ class User extends Authenticatable protected $casts = [ 'email_verified_at' => 'datetime', ]; + function isVerified(){ + return $this->verified = self::USER_VERIFIED; + } + function isAdmin(){ + return $this->admin == self::ISADMIN; + } + + static function generateToken(){ + return str_random(40); + } } diff --git a/routes/api.php b/routes/api.php index 0fc5ed5..c35daaa 100644 --- a/routes/api.php +++ b/routes/api.php @@ -18,9 +18,10 @@ return $request->user(); }); */ -Route::get('hail/{x?}',function($x){ - if($x) echo '

Hello World!

'; - else echo '

Hello World! '.$x.'

'; +Route::get('hail/{x?}',function(Request $x){ + $x = $x->input('x'); + if(isset($x)) echo '

Hello World!

'; + else echo '

Hello World! to '.$x.'

'; }); Route::resource('/user','User\UserController',['except'=>['create', 'edit']]); Route::resource('buyer','Buyer\BuyerController',['only'=>['show','index']]); From 3baf6cc1116c8a532eae71c0f29d396525540faf Mon Sep 17 00:00:00 2001 From: pieroMC98 Date: Mon, 7 Sep 2020 01:53:40 +0200 Subject: [PATCH 2/9] aggregate migrations --- app/Model/Product.php | 2 +- app/Model/User.php | 10 +++--- database/factories/UserFactory.php | 4 +++ .../2014_10_12_000000_create_users_table.php | 6 ++++ .../migrations/2020_09_05_230011_product.php | 13 ++++++- .../2020_09_05_230054_transaction.php | 11 +++++- .../migrations/2020_09_05_230131_category.php | 7 +++- ...20_09_06_233206_category_product_table.php | 34 +++++++++++++++++++ 8 files changed, 79 insertions(+), 8 deletions(-) create mode 100644 database/migrations/2020_09_06_233206_category_product_table.php diff --git a/app/Model/Product.php b/app/Model/Product.php index af351f6..e511b4f 100644 --- a/app/Model/Product.php +++ b/app/Model/Product.php @@ -8,7 +8,7 @@ class Product extends Model { const AVAILABLE = true; - const NOTAVAILABLE = false; + const UNAVAILABLE = false; protected $fillable = [ 'name', 'brief', diff --git a/app/Model/User.php b/app/Model/User.php index 286b846..35471c3 100644 --- a/app/Model/User.php +++ b/app/Model/User.php @@ -2,6 +2,7 @@ namespace App; +use Illuminate\Support\Str; use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; @@ -12,14 +13,15 @@ class User extends Authenticatable const USER_VERIFIED = true; const USER_NOT_VERIFIED = false; - const ISADMIN = true; + const ADMIN = true; + const REGULAR = false; /** * The attributes that are mass assignable. * * @var array */ protected $fillable = [ - 'name', 'email', 'password','verirified','verification_token','admin' + 'name', 'email', 'password','verified','verification_token','admin' ]; @@ -44,10 +46,10 @@ function isVerified(){ return $this->verified = self::USER_VERIFIED; } function isAdmin(){ - return $this->admin == self::ISADMIN; + return $this->admin == self::ADMIN; } static function generateToken(){ - return str_random(40); + return Str::random(40); } } diff --git a/database/factories/UserFactory.php b/database/factories/UserFactory.php index 741edea..e0bd6df 100644 --- a/database/factories/UserFactory.php +++ b/database/factories/UserFactory.php @@ -24,5 +24,9 @@ 'email_verified_at' => now(), 'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password 'remember_token' => Str::random(10), + + 'verified'=> $check = $faker->randomElement([User::USER_VERIFIED, User::USER_NOT_VERIFIED]), + 'verification_token' => $check == User::USER_VERIFIED ? null : User::generateToken(), + 'admin' => $faker->randomElement([User::ADMIN, user::REGULAR]) ]; }); diff --git a/database/migrations/2014_10_12_000000_create_users_table.php b/database/migrations/2014_10_12_000000_create_users_table.php index 621a24e..cfc5a50 100644 --- a/database/migrations/2014_10_12_000000_create_users_table.php +++ b/database/migrations/2014_10_12_000000_create_users_table.php @@ -1,5 +1,6 @@ string('password'); $table->rememberToken(); $table->timestamps(); + + $table->string('verified')->default(User::USER_NOT_VERIFIED); + $table->string('verification_token')->nullable(); + $table->string('admin')->default(User::REGULAR); + }); } diff --git a/database/migrations/2020_09_05_230011_product.php b/database/migrations/2020_09_05_230011_product.php index 6f57807..6d68945 100644 --- a/database/migrations/2020_09_05_230011_product.php +++ b/database/migrations/2020_09_05_230011_product.php @@ -13,7 +13,18 @@ class Product extends Migration */ public function up() { - // + Schema::create('product',function(Blueprint $table){ + $table->increments('id'); + $table->string('name'); + $table->string('brief',1000); + $table->string('quantify')->unsigned(); + $table->timestamps(); + $table->string('status')->default(App\Product::UNAVAILABLE); + $table->integer('seller_id')->unsigned(); + $table->string('image'); + $table->foreign('seller_id')->references('id')->on('user'); + }); + } /** diff --git a/database/migrations/2020_09_05_230054_transaction.php b/database/migrations/2020_09_05_230054_transaction.php index 109bf01..72890c7 100644 --- a/database/migrations/2020_09_05_230054_transaction.php +++ b/database/migrations/2020_09_05_230054_transaction.php @@ -13,7 +13,16 @@ class Transaction extends Migration */ public function up() { - // + Schema::create('transaction',function(Blueprint $t){ + $t->increments('id')->unsigned(); + $t->timestamps(); + $t->integer('quantify')->unsigned(); + $t->integer('buyer_id')->unsigned(); + $t->integer('product_id')->unsigned(); + + $t->foreignId('buyer_id')->references('id')->on('user'); + $t->foreign('product_id')->references('id')->on('product'); + }); } /** diff --git a/database/migrations/2020_09_05_230131_category.php b/database/migrations/2020_09_05_230131_category.php index 6fc0257..b50025e 100644 --- a/database/migrations/2020_09_05_230131_category.php +++ b/database/migrations/2020_09_05_230131_category.php @@ -13,7 +13,12 @@ class Category extends Migration */ public function up() { - // + Schema::create('category',function(Blueprint $t){ + $t->increments('id')->unsigned(); + $t->string('name'); + $t->string('brief',1000); + $t->timestamps(); + }); } /** diff --git a/database/migrations/2020_09_06_233206_category_product_table.php b/database/migrations/2020_09_06_233206_category_product_table.php new file mode 100644 index 0000000..233a034 --- /dev/null +++ b/database/migrations/2020_09_06_233206_category_product_table.php @@ -0,0 +1,34 @@ +increments('category_id')->unsigned(); + $table->increments('product_id')->unsigned(); + + $table->foreign('category_id')->references('id')->on('category'); + $table->foreign('product_id')->references('id')->on('product'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('category_product'); + } +} From b04f5b980226488a7b1b0e3fb180ea7b8cf86812 Mon Sep 17 00:00:00 2001 From: pieroMC98 Date: Mon, 7 Sep 2020 14:13:30 +0200 Subject: [PATCH 3/9] aggregate more factories --- database/factories/CategoryFactory.php | 13 +++++++++++++ database/factories/ProductFactory.php | 19 +++++++++++++++++++ database/factories/TransactionFactory.php | 20 ++++++++++++++++++++ public/img/1.jpg | Bin 0 -> 38140 bytes public/img/2.jpg | Bin 0 -> 15467 bytes public/img/3.jpeg | Bin 0 -> 12948 bytes 6 files changed, 52 insertions(+) create mode 100644 database/factories/CategoryFactory.php create mode 100644 database/factories/ProductFactory.php create mode 100644 database/factories/TransactionFactory.php create mode 100644 public/img/1.jpg create mode 100644 public/img/2.jpg create mode 100644 public/img/3.jpeg diff --git a/database/factories/CategoryFactory.php b/database/factories/CategoryFactory.php new file mode 100644 index 0000000..35515b4 --- /dev/null +++ b/database/factories/CategoryFactory.php @@ -0,0 +1,13 @@ +define(Category::class, function (Faker $faker) { + return [ + 'name'=> $faker->word, + 'brief'=> $faker->paragraph(1) + ]; +}); diff --git a/database/factories/ProductFactory.php b/database/factories/ProductFactory.php new file mode 100644 index 0000000..8a1f6b6 --- /dev/null +++ b/database/factories/ProductFactory.php @@ -0,0 +1,19 @@ +define(Product::class, function (Faker $faker) { + return [ + 'name'=>$faker->word, + 'brief'=> $faker->paragraph(1), + 'quantify'=> $faker->numberBetween(1,10), + 'status'=> $faker->randomElement([Product::AVAILABLE, Product::UNAVAILABLE]), + 'image'=> $faker->randomElement(['1.jpg', '2.jpg', '3.jpeg']), + 'seller_id' => User::inRandomOrder()->first()->id, + //'seller_id' => User::all()->random()->id + ]; +}); diff --git a/database/factories/TransactionFactory.php b/database/factories/TransactionFactory.php new file mode 100644 index 0000000..537c0fa --- /dev/null +++ b/database/factories/TransactionFactory.php @@ -0,0 +1,20 @@ +define(Transaction::class, function (Faker $faker) { + $seller = Seller::has('product')->get()->random(); + $buyer = User::all()->except($seller->id)->random(); + return [ + 'name'=> $faker->word, + 'quantify'=> $faker->numberBetween(1,3), + 'buyer_id'=> $buyer->id, + 'product_id'=>$seller->product->random()->id, + ]; +}); diff --git a/public/img/1.jpg b/public/img/1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..72aab4cb59154db29e654d6d0cc689e7306fe739 GIT binary patch literal 38140 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 literal 0 HcmV?d00001 diff --git a/public/img/2.jpg b/public/img/2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..29038d9aeccd066b147804ca2564459ce627b85f GIT binary patch literal 15467 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 literal 0 HcmV?d00001 diff --git a/public/img/3.jpeg b/public/img/3.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..39c6642f500348f11a2cbc487d579a00ee71dbdc GIT binary patch literal 12948 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 literal 0 HcmV?d00001 From b0a42ad160323368a43a3dfe5b4db9906404e479 Mon Sep 17 00:00:00 2001 From: pieroMC98 Date: Tue, 8 Sep 2020 03:50:13 +0200 Subject: [PATCH 4/9] aggregate seeders to database --- app/Model/Buyer.php | 3 +- app/Model/Category.php | 1 + app/Model/Product.php | 2 ++ app/Model/Seller.php | 5 ++- app/Model/Transaction.php | 1 + app/Model/User.php | 1 + app/Providers/AppServiceProvider.php | 3 +- database/factories/CategoryFactory.php | 2 +- database/factories/TransactionFactory.php | 2 -- .../2014_10_12_000000_create_users_table.php | 4 +-- .../migrations/2020_09_05_230011_product.php | 10 +++--- .../2020_09_05_230054_transaction.php | 10 +++--- .../migrations/2020_09_05_230131_category.php | 4 +-- ...20_09_06_233206_category_product_table.php | 5 ++- database/seeds/DatabaseSeeder.php | 32 ++++++++++++++++++- 15 files changed, 60 insertions(+), 25 deletions(-) diff --git a/app/Model/Buyer.php b/app/Model/Buyer.php index 85750d7..e1ce991 100644 --- a/app/Model/Buyer.php +++ b/app/Model/Buyer.php @@ -5,8 +5,9 @@ use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\HasMany; -class Buyer extends Model +class Buyer extends User { + // protected $table = 'buyer'; function transaction(){ return $this->HasMany(Transaction::class); } diff --git a/app/Model/Category.php b/app/Model/Category.php index 0e8281c..bc735c2 100644 --- a/app/Model/Category.php +++ b/app/Model/Category.php @@ -6,6 +6,7 @@ class Category extends Model { + protected $table = 'category'; protected $fillable = [ 'name', 'brief' diff --git a/app/Model/Product.php b/app/Model/Product.php index e511b4f..dbfb767 100644 --- a/app/Model/Product.php +++ b/app/Model/Product.php @@ -7,12 +7,14 @@ class Product extends Model { + protected $table = 'product'; const AVAILABLE = true; const UNAVAILABLE = false; protected $fillable = [ 'name', 'brief', 'status', + 'quantify', 'image', 'seller_id' ]; diff --git a/app/Model/Seller.php b/app/Model/Seller.php index 9d83e87..a89917f 100644 --- a/app/Model/Seller.php +++ b/app/Model/Seller.php @@ -2,10 +2,9 @@ namespace App; -use Illuminate\Database\Eloquent\Model; - -class Seller extends Model +class Seller extends User { + // protected $table = 'seller'; function product(){ return $this->hasMany(Product::class); } diff --git a/app/Model/Transaction.php b/app/Model/Transaction.php index ddbe3e1..004cfed 100644 --- a/app/Model/Transaction.php +++ b/app/Model/Transaction.php @@ -6,6 +6,7 @@ class Transaction extends Model { + protected $table = 'transaction'; protected $fillable = [ 'quantify','buyer_id','product_id' ]; diff --git a/app/Model/User.php b/app/Model/User.php index 35471c3..fbb674d 100644 --- a/app/Model/User.php +++ b/app/Model/User.php @@ -9,6 +9,7 @@ class User extends Authenticatable { + protected $table = 'user'; use Notifiable; const USER_VERIFIED = true; const USER_NOT_VERIFIED = false; diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index ee8ca5b..526f074 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -2,6 +2,7 @@ namespace App\Providers; +use Illuminate\Support\Facades\Schema; use Illuminate\Support\ServiceProvider; class AppServiceProvider extends ServiceProvider @@ -23,6 +24,6 @@ public function register() */ public function boot() { - // + Schema::defaultStringLength(191); } } diff --git a/database/factories/CategoryFactory.php b/database/factories/CategoryFactory.php index 35515b4..b314fc8 100644 --- a/database/factories/CategoryFactory.php +++ b/database/factories/CategoryFactory.php @@ -7,7 +7,7 @@ $factory->define(Category::class, function (Faker $faker) { return [ - 'name'=> $faker->word, + 'name'=> $faker->word, 'brief'=> $faker->paragraph(1) ]; }); diff --git a/database/factories/TransactionFactory.php b/database/factories/TransactionFactory.php index 537c0fa..dff4dc5 100644 --- a/database/factories/TransactionFactory.php +++ b/database/factories/TransactionFactory.php @@ -2,7 +2,6 @@ /** @var \Illuminate\Database\Eloquent\Factory $factory */ -use App\Buyer; use App\Seller; use App\Transaction; use App\User; @@ -12,7 +11,6 @@ $seller = Seller::has('product')->get()->random(); $buyer = User::all()->except($seller->id)->random(); return [ - 'name'=> $faker->word, 'quantify'=> $faker->numberBetween(1,3), 'buyer_id'=> $buyer->id, 'product_id'=>$seller->product->random()->id, diff --git a/database/migrations/2014_10_12_000000_create_users_table.php b/database/migrations/2014_10_12_000000_create_users_table.php index cfc5a50..47118ff 100644 --- a/database/migrations/2014_10_12_000000_create_users_table.php +++ b/database/migrations/2014_10_12_000000_create_users_table.php @@ -14,7 +14,7 @@ class CreateUsersTable extends Migration */ public function up() { - Schema::create('users', function (Blueprint $table) { + Schema::create('user', function (Blueprint $table) { $table->id(); $table->string('name'); $table->string('email')->unique(); @@ -37,6 +37,6 @@ public function up() */ public function down() { - Schema::dropIfExists('users'); + Schema::dropIfExists('user'); } } diff --git a/database/migrations/2020_09_05_230011_product.php b/database/migrations/2020_09_05_230011_product.php index 6d68945..12799b6 100644 --- a/database/migrations/2020_09_05_230011_product.php +++ b/database/migrations/2020_09_05_230011_product.php @@ -14,15 +14,16 @@ class Product extends Migration public function up() { Schema::create('product',function(Blueprint $table){ - $table->increments('id'); + $table->id(); $table->string('name'); $table->string('brief',1000); - $table->string('quantify')->unsigned(); + $table->integer('quantify')->unsigned(); $table->timestamps(); $table->string('status')->default(App\Product::UNAVAILABLE); - $table->integer('seller_id')->unsigned(); + // $table->integer('seller_id'); $table->string('image'); - $table->foreign('seller_id')->references('id')->on('user'); + // $table->foreign('seller_id')->references('id')->on('user'); + $table->foreignId('seller_id')->constrained('user'); }); } @@ -35,5 +36,6 @@ public function up() public function down() { // + Schema::dropIfExists('product'); } } diff --git a/database/migrations/2020_09_05_230054_transaction.php b/database/migrations/2020_09_05_230054_transaction.php index 72890c7..494955f 100644 --- a/database/migrations/2020_09_05_230054_transaction.php +++ b/database/migrations/2020_09_05_230054_transaction.php @@ -14,13 +14,13 @@ class Transaction extends Migration public function up() { Schema::create('transaction',function(Blueprint $t){ - $t->increments('id')->unsigned(); + $t->id(); $t->timestamps(); $t->integer('quantify')->unsigned(); - $t->integer('buyer_id')->unsigned(); - $t->integer('product_id')->unsigned(); + $t->unsignedBigInteger('buyer_id'); + $t->unsignedBigInteger('product_id'); - $t->foreignId('buyer_id')->references('id')->on('user'); + $t->foreign('buyer_id')->references('id')->on('user'); $t->foreign('product_id')->references('id')->on('product'); }); } @@ -32,6 +32,6 @@ public function up() */ public function down() { - // + Schema::dropIfExists('transaction'); } } diff --git a/database/migrations/2020_09_05_230131_category.php b/database/migrations/2020_09_05_230131_category.php index b50025e..d51d129 100644 --- a/database/migrations/2020_09_05_230131_category.php +++ b/database/migrations/2020_09_05_230131_category.php @@ -14,7 +14,7 @@ class Category extends Migration public function up() { Schema::create('category',function(Blueprint $t){ - $t->increments('id')->unsigned(); + $t->id(); $t->string('name'); $t->string('brief',1000); $t->timestamps(); @@ -28,6 +28,6 @@ public function up() */ public function down() { - // + Schema::dropIfExists('category'); } } diff --git a/database/migrations/2020_09_06_233206_category_product_table.php b/database/migrations/2020_09_06_233206_category_product_table.php index 233a034..4d2213c 100644 --- a/database/migrations/2020_09_06_233206_category_product_table.php +++ b/database/migrations/2020_09_06_233206_category_product_table.php @@ -14,9 +14,8 @@ class CategoryProductTable extends Migration public function up() { Schema::create('category_product', function (Blueprint $table) { - $table->increments('category_id')->unsigned(); - $table->increments('product_id')->unsigned(); - + $table->unsignedBigInteger('category_id'); + $table->unsignedBigInteger('product_id'); $table->foreign('category_id')->references('id')->on('category'); $table->foreign('product_id')->references('id')->on('product'); }); diff --git a/database/seeds/DatabaseSeeder.php b/database/seeds/DatabaseSeeder.php index 237dfc5..5720adf 100644 --- a/database/seeds/DatabaseSeeder.php +++ b/database/seeds/DatabaseSeeder.php @@ -1,6 +1,11 @@ call(UserSeeder::class); + // desactivamos confirmacion de claves foraneas(temporal) + DB::statement('set FOREIGN_KEY_CHECKS = 0'); + // borrar elementos de las tablas + User::truncate(); + Product::truncate(); + Category::truncate(); + Transaction::truncate(); + // tabla pivote + DB::table('category_product')->truncate(); + + $amount_persons = 200; + $amount_categories = 30; + $amount_products = $amount_transactions = 1000; + + factory(User::class, $amount_persons)->create(); + factory(Category::class, $amount_categories)->create(); + + // al momento que creamos un producto, lo asociamos con una categoria + factory(Product::class, $amount_transactions)->create()->each( + function($products){ + // obtiene array de lista de categorias 1 al 5, identificando cada una por el id + $categories = Category::all()->random(mt_rand(1,5))->pluck('id'); + $products->category()->attach($categories); + } + ); + factory(Transaction::class,$amount_transactions)->create(); } } From c167a0f1754bab383cac673ee21722c6568ab0dd Mon Sep 17 00:00:00 2001 From: pieroMC98 Date: Wed, 9 Sep 2020 01:21:28 +0200 Subject: [PATCH 5/9] fix admin request value --- app/Http/Controllers/User/UserController.php | 61 ++++++++++++++++++-- 1 file changed, 55 insertions(+), 6 deletions(-) diff --git a/app/Http/Controllers/User/UserController.php b/app/Http/Controllers/User/UserController.php index 1518de5..d37d2dd 100644 --- a/app/Http/Controllers/User/UserController.php +++ b/app/Http/Controllers/User/UserController.php @@ -3,6 +3,7 @@ namespace App\Http\Controllers\User; use App\Http\Controllers\Controller; +use App\User; use Illuminate\Http\Request; class UserController extends Controller @@ -14,7 +15,7 @@ class UserController extends Controller */ public function index() { - // + return response()->json( ['data'=>User::all()],200); } /** @@ -24,7 +25,7 @@ public function index() */ public function create() { - // + //no hace falta, ya esta creado } /** @@ -35,7 +36,19 @@ public function create() */ public function store(Request $request) { - // + $rules = [ + 'name' => 'required', + 'email'=>['required','email', 'unique:user'], + 'password'=>['required','min:6','confirmed'] + ]; + + $this->validate($request,$rules); + $value = $request->all(); + $value['password'] = bcrypt($request->password); + $value['verified'] = User::USER_NOT_VERIFIED; + $value['admin'] = User::REGULAR; + $value['verication_token'] = User::generateToken(); + return response()->json(['data'=>User::create($value)],201); } /** @@ -46,7 +59,7 @@ public function store(Request $request) */ public function show($id) { - // + return response()->json(['show'=>User::findOrFail($id)]); } /** @@ -57,7 +70,7 @@ public function show($id) */ public function edit($id) { - // + // no hace falta } /** @@ -69,7 +82,43 @@ public function edit($id) */ public function update(Request $request, $id) { - // + $user = User::findOrFail($id); + $rules = [ + 'email'=>['email', 'unique:user,email,'.$user->id], + 'password'=>['min:6','confirmed'], + 'admin'=> 'in:'.User::REGULAR.','.User::ADMIN + ]; + $this->validate($request,$rules); + + if($request->has('name')) $user->name = $request->name; + + if($request->has('email') && $user->email != $request->email){ + $user->verified = User::USER_NOT_VERIFIED; + $user->verification_token = User::generateToken(); + $user->email = $request->email; + } + + if($request->has('password')) + $user->password = bcrypt($request->password); + + if($request->has('admin')){ + if($user->isVerified()) + return response()->json([ + 'error'=>'only verified user can update his administratior value', + 'code' => 409 + ], 409); + $user->admin = $request->admin; + } + + if(!$user->isDirty()) + return response()->json([ + 'error' => 'you must update one value at least', + 'code'=>422 + ], + 422); + + $user->save(); + return response()->json(['data'=>$user],200); } /** From dacc3f831f2dd3eee95c8b79b553605e6c1821a8 Mon Sep 17 00:00:00 2001 From: pieroMC98 Date: Wed, 9 Sep 2020 23:55:41 +0200 Subject: [PATCH 6/9] aggregated mutators --- .../Controllers/Buyer/BuyerController.php | 5 +++-- .../Controllers/Product/ProductController.php | 2 -- .../Controllers/Seller/SellerController.php | 5 +++-- app/Http/Controllers/User/UserController.php | 3 ++- app/Model/User.php | 21 +++++++++++++++++++ database/seeds/DatabaseSeeder.php | 2 +- 6 files changed, 30 insertions(+), 8 deletions(-) diff --git a/app/Http/Controllers/Buyer/BuyerController.php b/app/Http/Controllers/Buyer/BuyerController.php index 449c98d..b8fe0f7 100644 --- a/app/Http/Controllers/Buyer/BuyerController.php +++ b/app/Http/Controllers/Buyer/BuyerController.php @@ -2,6 +2,7 @@ namespace App\Http\Controllers\Buyer; +use App\Buyer; use App\Http\Controllers\Controller; use Illuminate\Http\Request; @@ -14,7 +15,7 @@ class BuyerController extends Controller */ public function index() { - // + return response()->json(['data' => Buyer::has('transaction')->get()],200); } /** @@ -46,7 +47,7 @@ public function store(Request $request) */ public function show($id) { - // + return response()->json(['data'=>Buyer::has('transaction')->findOrFail($id)],200); } /** diff --git a/app/Http/Controllers/Product/ProductController.php b/app/Http/Controllers/Product/ProductController.php index 1e9ace6..6b18fb5 100644 --- a/app/Http/Controllers/Product/ProductController.php +++ b/app/Http/Controllers/Product/ProductController.php @@ -14,7 +14,6 @@ class ProductController extends Controller */ public function index() { - // } /** @@ -46,7 +45,6 @@ public function store(Request $request) */ public function show($id) { - // } /** diff --git a/app/Http/Controllers/Seller/SellerController.php b/app/Http/Controllers/Seller/SellerController.php index 58d4697..70df751 100644 --- a/app/Http/Controllers/Seller/SellerController.php +++ b/app/Http/Controllers/Seller/SellerController.php @@ -3,6 +3,7 @@ namespace App\Http\Controllers\Seller; use App\Http\Controllers\Controller; +use App\Seller; use Illuminate\Http\Request; class SellerController extends Controller @@ -14,7 +15,7 @@ class SellerController extends Controller */ public function index() { - // + return response()->json(['data'=>Seller::has('product')->get()],200); } /** @@ -46,7 +47,7 @@ public function store(Request $request) */ public function show($id) { - // + return response()->json(['data'=>Seller::has('product')->findOrFail($id)],200); } /** diff --git a/app/Http/Controllers/User/UserController.php b/app/Http/Controllers/User/UserController.php index d37d2dd..8ce60a8 100644 --- a/app/Http/Controllers/User/UserController.php +++ b/app/Http/Controllers/User/UserController.php @@ -129,6 +129,7 @@ public function update(Request $request, $id) */ public function destroy($id) { - // + $user = User::findOrFail($id); + $user->delete(); } } diff --git a/app/Model/User.php b/app/Model/User.php index fbb674d..b1a0888 100644 --- a/app/Model/User.php +++ b/app/Model/User.php @@ -26,6 +26,7 @@ class User extends Authenticatable ]; + /** * The attributes that should be hidden for arrays. * @@ -53,4 +54,24 @@ function isAdmin(){ static function generateToken(){ return Str::random(40); } + + /* + """ mutador: modificaciones antes de insertar en la base de datos + """ accesor: modificar un valor dado despues de insertar en la base de datos + * mutadores de atibutos name y email + */ + + function setNameAttribute($value) { + $this->attributes['name'] = strtolower($value); + } + + function setEmailAttribute($value) { + $this->attributes['email'] = strtolower($value); + } + /* + *accesor de nombre + */ + function getNameAttribute($value){ + return ucfirst($value); + } } diff --git a/database/seeds/DatabaseSeeder.php b/database/seeds/DatabaseSeeder.php index 5720adf..81aafca 100644 --- a/database/seeds/DatabaseSeeder.php +++ b/database/seeds/DatabaseSeeder.php @@ -26,7 +26,7 @@ public function run() // tabla pivote DB::table('category_product')->truncate(); - $amount_persons = 200; + $amount_persons = 1000; $amount_categories = 30; $amount_products = $amount_transactions = 1000; From 06730e725beb158f2ec1c11927d63f677526418f Mon Sep 17 00:00:00 2001 From: pieroMC98 Date: Thu, 10 Sep 2020 23:48:33 +0200 Subject: [PATCH 7/9] aggregated Traits --- app/Http/Controllers/ApiController.php | 12 ++++++++++ .../Controllers/Buyer/BuyerController.php | 10 ++++---- .../Category/CategoryController.php | 4 ++-- .../Controllers/Product/ProductController.php | 4 ++-- .../Controllers/Seller/SellerController.php | 10 ++++---- app/Http/Controllers/User/UserController.php | 19 ++++++++------- app/Traits/ApiResponser.php | 24 +++++++++++++++++++ 7 files changed, 63 insertions(+), 20 deletions(-) create mode 100644 app/Http/Controllers/ApiController.php create mode 100644 app/Traits/ApiResponser.php diff --git a/app/Http/Controllers/ApiController.php b/app/Http/Controllers/ApiController.php new file mode 100644 index 0000000..72f638a --- /dev/null +++ b/app/Http/Controllers/ApiController.php @@ -0,0 +1,12 @@ +json(['data' => Buyer::has('transaction')->get()],200); + /* return response()->json(['data' => Buyer::has('transaction')->get()],200); */ + return $this->showAll(Buyer::has('transaction')->get()); } /** @@ -47,7 +48,8 @@ public function store(Request $request) */ public function show($id) { - return response()->json(['data'=>Buyer::has('transaction')->findOrFail($id)],200); + /* return response()->json(['data'=>Buyer::has('transaction')->findOrFail($id)],200); */ + return $this->showOne(Buyer::has('transaction')->findOrFail($id)); } /** diff --git a/app/Http/Controllers/Category/CategoryController.php b/app/Http/Controllers/Category/CategoryController.php index e51509d..bbc082d 100644 --- a/app/Http/Controllers/Category/CategoryController.php +++ b/app/Http/Controllers/Category/CategoryController.php @@ -2,10 +2,10 @@ namespace App\Http\Controllers\Category; -use App\Http\Controllers\Controller; +use App\Http\Controllers\ApiController; use Illuminate\Http\Request; -class CategoryController extends Controller +class CategoryController extends ApiController { /** * Display a listing of the resource. diff --git a/app/Http/Controllers/Product/ProductController.php b/app/Http/Controllers/Product/ProductController.php index 6b18fb5..af65f7e 100644 --- a/app/Http/Controllers/Product/ProductController.php +++ b/app/Http/Controllers/Product/ProductController.php @@ -2,10 +2,10 @@ namespace App\Http\Controllers\Product; -use App\Http\Controllers\Controller; +use App\Http\Controllers\ApiController; use Illuminate\Http\Request; -class ProductController extends Controller +class ProductController extends ApiController { /** * Display a listing of the resource. diff --git a/app/Http/Controllers/Seller/SellerController.php b/app/Http/Controllers/Seller/SellerController.php index 70df751..a92c90a 100644 --- a/app/Http/Controllers/Seller/SellerController.php +++ b/app/Http/Controllers/Seller/SellerController.php @@ -2,11 +2,11 @@ namespace App\Http\Controllers\Seller; -use App\Http\Controllers\Controller; +use App\Http\Controllers\ApiController; use App\Seller; use Illuminate\Http\Request; -class SellerController extends Controller +class SellerController extends ApiController { /** * Display a listing of the resource. @@ -15,7 +15,8 @@ class SellerController extends Controller */ public function index() { - return response()->json(['data'=>Seller::has('product')->get()],200); + /* return response()->json(['data'=>Seller::has('product')->get()],200); */ + return $this->showAll(Seller::has('product')->get()); } /** @@ -47,7 +48,8 @@ public function store(Request $request) */ public function show($id) { - return response()->json(['data'=>Seller::has('product')->findOrFail($id)],200); + /* return response()->json(['data'=>Seller::has('product')->findOrFail($id)],200); */ + return $this->showOne(Seller::has('product')->findOrFail($id)); } /** diff --git a/app/Http/Controllers/User/UserController.php b/app/Http/Controllers/User/UserController.php index 8ce60a8..95bd7c4 100644 --- a/app/Http/Controllers/User/UserController.php +++ b/app/Http/Controllers/User/UserController.php @@ -2,11 +2,11 @@ namespace App\Http\Controllers\User; -use App\Http\Controllers\Controller; +use App\Http\Controllers\ApiController; use App\User; use Illuminate\Http\Request; -class UserController extends Controller +class UserController extends ApiController { /** * Display a listing of the resource. @@ -15,7 +15,7 @@ class UserController extends Controller */ public function index() { - return response()->json( ['data'=>User::all()],200); + return $this->showAll(User::all()); } /** @@ -48,7 +48,8 @@ public function store(Request $request) $value['verified'] = User::USER_NOT_VERIFIED; $value['admin'] = User::REGULAR; $value['verication_token'] = User::generateToken(); - return response()->json(['data'=>User::create($value)],201); + // return response()->json(['data'=>User::create($value)],201); + return $this->showOne(User::create($value)); } /** @@ -59,7 +60,8 @@ public function store(Request $request) */ public function show($id) { - return response()->json(['show'=>User::findOrFail($id)]); + /* return response()->json(['show'=>User::findOrFail($id)]); */ + return $this->showOne(User::findOrFail($id)); } /** @@ -103,7 +105,7 @@ public function update(Request $request, $id) if($request->has('admin')){ if($user->isVerified()) - return response()->json([ + return $this->errorResponse([ 'error'=>'only verified user can update his administratior value', 'code' => 409 ], 409); @@ -111,14 +113,15 @@ public function update(Request $request, $id) } if(!$user->isDirty()) - return response()->json([ + return $this->errorResponse([ 'error' => 'you must update one value at least', 'code'=>422 ], 422); $user->save(); - return response()->json(['data'=>$user],200); + /* return response()->json(['data'=>$user],200); */ + return $this->showOne($user); } /** diff --git a/app/Traits/ApiResponser.php b/app/Traits/ApiResponser.php new file mode 100644 index 0000000..5ac5d87 --- /dev/null +++ b/app/Traits/ApiResponser.php @@ -0,0 +1,24 @@ +json($data,$code); + } + + protected function errorResponse($msg, $code){ + return response()->json(['error' => $msg, 'code' => $code], $code); + } + + protected function showAll(Collection $c, $code = 200){ + return $this->successResponse(['data' => $c], $code); + } + + protected function showOne(Model $c, $code = 200){ + return $this->successResponse(['data' => $c], $code); + } +} From 1f633edef3344c215868a523fc0ee55e5ee11c6e Mon Sep 17 00:00:00 2001 From: pieroMC98 Date: Sat, 12 Sep 2020 02:37:22 +0200 Subject: [PATCH 8/9] fix handler --- .editorconfig | 2 +- .prettierrc | 5 + app/Exceptions/Handler.php | 81 +++--- app/Http/Controllers/ApiController.php | 2 +- app/Http/Controllers/User/UserController.php | 265 ++++++++++--------- app/Http/Kernel.php | 6 +- 6 files changed, 188 insertions(+), 173 deletions(-) create mode 100644 .prettierrc diff --git a/.editorconfig b/.editorconfig index 6537ca4..cdfb3cd 100644 --- a/.editorconfig +++ b/.editorconfig @@ -12,4 +12,4 @@ trim_trailing_whitespace = true trim_trailing_whitespace = false [*.{yml,yaml}] -indent_size = 2 +indent_size = 4 diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..6fc0eab --- /dev/null +++ b/.prettierrc @@ -0,0 +1,5 @@ +{ + "files": ["*.php"], + "tabWidth": 4, + "useTabs": true +} diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php index 59c585d..6004dce 100644 --- a/app/Exceptions/Handler.php +++ b/app/Exceptions/Handler.php @@ -7,49 +7,46 @@ class Handler extends ExceptionHandler { - /** - * A list of the exception types that are not reported. - * - * @var array - */ - protected $dontReport = [ - // - ]; + /** + * A list of the exception types that are not reported. + * + * @var array + */ + protected $dontReport = [ + // + ]; - /** - * A list of the inputs that are never flashed for validation exceptions. - * - * @var array - */ - protected $dontFlash = [ - 'password', - 'password_confirmation', - ]; + /** + * A list of the inputs that are never flashed for validation exceptions. + * + * @var array + */ + protected $dontFlash = ['password', 'password_confirmation']; - /** - * Report or log an exception. - * - * @param \Throwable $exception - * @return void - * - * @throws \Exception - */ - public function report(Throwable $exception) - { - parent::report($exception); - } + /** + * Report or log an exception. + * + * @param \Throwable $exception + * @return void + * + * @throws \Exception + */ + public function report(Throwable $exception) + { + parent::report($exception); + } - /** - * Render an exception into an HTTP response. - * - * @param \Illuminate\Http\Request $request - * @param \Throwable $exception - * @return \Symfony\Component\HttpFoundation\Response - * - * @throws \Throwable - */ - public function render($request, Throwable $exception) - { - return parent::render($request, $exception); - } + /** + * Render an exception into an HTTP response. + * + * @param \Illuminate\Http\Request $request + * @param \Throwable $exception + * @return \Symfony\Component\HttpFoundation\Response + * + * @throws \Throwable + */ + public function render($request, Throwable $exception) + { + return parent::render($request, $exception); + } } diff --git a/app/Http/Controllers/ApiController.php b/app/Http/Controllers/ApiController.php index 72f638a..2f60b04 100644 --- a/app/Http/Controllers/ApiController.php +++ b/app/Http/Controllers/ApiController.php @@ -8,5 +8,5 @@ // como todas las clases heredan de esta, todas heredan Controller::class class ApiController extends Controller { - use ApiResponser; + use ApiResponser; } diff --git a/app/Http/Controllers/User/UserController.php b/app/Http/Controllers/User/UserController.php index 95bd7c4..cc973d8 100644 --- a/app/Http/Controllers/User/UserController.php +++ b/app/Http/Controllers/User/UserController.php @@ -8,131 +8,142 @@ class UserController extends ApiController { - /** - * Display a listing of the resource. - * - * @return \Illuminate\Http\Response - */ - public function index() - { - return $this->showAll(User::all()); - } - - /** - * Show the form for creating a new resource. - * - * @return \Illuminate\Http\Response - */ - public function create() - { - //no hace falta, ya esta creado - } - - /** - * Store a newly created resource in storage. - * - * @param \Illuminate\Http\Request $request - * @return \Illuminate\Http\Response - */ - public function store(Request $request) - { - $rules = [ - 'name' => 'required', - 'email'=>['required','email', 'unique:user'], - 'password'=>['required','min:6','confirmed'] - ]; - - $this->validate($request,$rules); - $value = $request->all(); - $value['password'] = bcrypt($request->password); - $value['verified'] = User::USER_NOT_VERIFIED; - $value['admin'] = User::REGULAR; - $value['verication_token'] = User::generateToken(); - // return response()->json(['data'=>User::create($value)],201); - return $this->showOne(User::create($value)); - } - - /** - * Display the specified resource. - * - * @param int $id - * @return \Illuminate\Http\Response - */ - public function show($id) - { - /* return response()->json(['show'=>User::findOrFail($id)]); */ - return $this->showOne(User::findOrFail($id)); - } - - /** - * Show the form for editing the specified resource. - * - * @param int $id - * @return \Illuminate\Http\Response - */ - public function edit($id) - { - // no hace falta - } - - /** - * Update the specified resource in storage. - * - * @param \Illuminate\Http\Request $request - * @param int $id - * @return \Illuminate\Http\Response - */ - public function update(Request $request, $id) - { - $user = User::findOrFail($id); - $rules = [ - 'email'=>['email', 'unique:user,email,'.$user->id], - 'password'=>['min:6','confirmed'], - 'admin'=> 'in:'.User::REGULAR.','.User::ADMIN - ]; - $this->validate($request,$rules); - - if($request->has('name')) $user->name = $request->name; - - if($request->has('email') && $user->email != $request->email){ - $user->verified = User::USER_NOT_VERIFIED; - $user->verification_token = User::generateToken(); - $user->email = $request->email; - } - - if($request->has('password')) - $user->password = bcrypt($request->password); - - if($request->has('admin')){ - if($user->isVerified()) - return $this->errorResponse([ - 'error'=>'only verified user can update his administratior value', - 'code' => 409 - ], 409); - $user->admin = $request->admin; - } - - if(!$user->isDirty()) - return $this->errorResponse([ - 'error' => 'you must update one value at least', - 'code'=>422 - ], - 422); - - $user->save(); - /* return response()->json(['data'=>$user],200); */ - return $this->showOne($user); - } - - /** - * Remove the specified resource from storage. - * - * @param int $id - * @return \Illuminate\Http\Response - */ - public function destroy($id) - { - $user = User::findOrFail($id); - $user->delete(); - } + /** + * Display a listing of the resource. + * + * @return \Illuminate\Http\Response + */ + public function index() + { + return $this->showAll(User::all()); + } + + /** + * Show the form for creating a new resource. + * + * @return \Illuminate\Http\Response + */ + public function create() + { + //no hace falta, ya esta creado + } + + /** + * Store a newly created resource in storage. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\Response + */ + public function store(Request $request) + { + $rules = [ + 'name' => 'required', + 'email' => ['required', 'email', 'unique:user'], + 'password' => ['required', 'min:6', 'confirmed'], + ]; + + $this->validate($request, $rules); + $value = $request->all(); + $value['password'] = bcrypt($request->password); + $value['verified'] = User::USER_NOT_VERIFIED; + $value['admin'] = User::REGULAR; + $value['verication_token'] = User::generateToken(); + // return response()->json(['data'=>User::create($value)],201); + return $this->showOne(User::create($value)); + } + + /** + * Display the specified resource. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function show($id) + { + /* return response()->json(['show'=>User::findOrFail($id)]); */ + return $this->showOne(User::findOrFail($id)); + } + + /** + * Show the form for editing the specified resource. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function edit($id) + { + // no hace falta + } + + /** + * Update the specified resource in storage. + * + * @param \Illuminate\Http\Request $request + * @param int $id + * @return \Illuminate\Http\Response + */ + public function update(Request $request, $id) + { + $user = User::findOrFail($id); + $rules = [ + 'email' => ['email', 'unique:user,email,' . $user->id], + 'password' => ['min:6', 'confirmed'], + 'admin' => 'in:' . User::REGULAR . ',' . User::ADMIN, + ]; + $this->validate($request, $rules); + + if ($request->has('name')) { + $user->name = $request->name; + } + + if ($request->has('email') && $user->email != $request->email) { + $user->verified = User::USER_NOT_VERIFIED; + $user->verification_token = User::generateToken(); + $user->email = $request->email; + } + + if ($request->has('password')) { + $user->password = bcrypt($request->password); + } + + if ($request->has('admin')) { + if ($user->isVerified()) { + return $this->errorResponse( + [ + 'error' => + 'only verified user can update his administratior value', + 'code' => 409, + ], + 409 + ); + } + $user->admin = $request->admin; + } + + if (!$user->isDirty()) { + return $this->errorResponse( + [ + 'error' => 'you must update one value at least', + 'code' => 422, + ], + 422 + ); + } + + $user->save(); + /* return response()->json(['data'=>$user],200); */ + return $this->showOne($user); + } + + /** + * Remove the specified resource from storage. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function destroy($id) + { + $user = User::findOrFail($id); + $user->delete(); + } } diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index 36ced13..7768877 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -54,12 +54,14 @@ class Kernel extends HttpKernel */ protected $routeMiddleware = [ 'auth' => \App\Http\Middleware\Authenticate::class, - 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, + 'auth.basic' => + \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class, 'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class, 'can' => \Illuminate\Auth\Middleware\Authorize::class, 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, - 'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class, + 'password.confirm' => + \Illuminate\Auth\Middleware\RequirePassword::class, 'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class, 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class, From 664e85fc20e3f5997b07acefb04c4ca800c4e102 Mon Sep 17 00:00:00 2001 From: pieroMC98 Date: Sat, 26 Sep 2020 19:57:41 +0200 Subject: [PATCH 9/9] add cron workflow --- composer.json | 122 ++--- composer.lock | 1346 +++++++++++++++++++++++++++++++++---------------- 2 files changed, 975 insertions(+), 493 deletions(-) diff --git a/composer.json b/composer.json index 7115b20..61a3187 100644 --- a/composer.json +++ b/composer.json @@ -1,63 +1,63 @@ { - "name": "laravel/laravel", - "type": "project", - "description": "The Laravel Framework.", - "keywords": [ - "framework", - "laravel" - ], - "license": "MIT", - "require": { - "php": "^7.2.5", - "fideloper/proxy": "^4.2", - "fruitcake/laravel-cors": "^2.0", - "guzzlehttp/guzzle": "^6.3", - "laravel/framework": "^7.24", - "laravel/tinker": "^2.0" - }, - "require-dev": { - "facade/ignition": "^2.0", - "fzaninotto/faker": "^1.9.1", - "mockery/mockery": "^1.3.1", - "nunomaduro/collision": "^4.1", - "phpunit/phpunit": "^8.5" - }, - "config": { - "optimize-autoloader": true, - "preferred-install": "dist", - "sort-packages": true - }, - "extra": { - "laravel": { - "dont-discover": [] - } - }, - "autoload": { - "psr-4": { - "App\\": "app/" - }, - "classmap": [ - "database/seeds", - "database/factories" - ] - }, - "autoload-dev": { - "psr-4": { - "Tests\\": "tests/" - } - }, - "minimum-stability": "dev", - "prefer-stable": true, - "scripts": { - "post-autoload-dump": [ - "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump", - "@php artisan package:discover --ansi" - ], - "post-root-package-install": [ - "@php -r \"file_exists('.env') || copy('.env.example', '.env');\"" - ], - "post-create-project-cmd": [ - "@php artisan key:generate --ansi" - ] - } + "name": "laravel/laravel", + "type": "project", + "description": "The Laravel Framework.", + "keywords": [ + "framework", + "laravel" + ], + "license": "MIT", + "require": { + "php": "^7.2.5", + "fideloper/proxy": "^4.2", + "fruitcake/laravel-cors": "^2.0", + "guzzlehttp/guzzle": "^7.0.1", + "laravel/framework": "^8.0", + "laravel/tinker": "^2.0" + }, + "require-dev": { + "facade/ignition": "^2.3.6", + "fzaninotto/faker": "^1.9.1", + "mockery/mockery": "^1.3.1", + "nunomaduro/collision": "^5.0", + "phpunit/phpunit": "^9.0" + }, + "config": { + "optimize-autoloader": true, + "preferred-install": "dist", + "sort-packages": true + }, + "extra": { + "laravel": { + "dont-discover": [] + } + }, + "autoload": { + "psr-4": { + "App\\": "app/" + }, + "classmap": [ + "database/seeds", + "database/factories" + ] + }, + "autoload-dev": { + "psr-4": { + "Tests\\": "tests/" + } + }, + "minimum-stability": "dev", + "prefer-stable": true, + "scripts": { + "post-autoload-dump": [ + "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump", + "@php artisan package:discover --ansi" + ], + "post-root-package-install": [ + "@php -r \"file_exists('.env') || copy('.env.example', '.env');\"" + ], + "post-create-project-cmd": [ + "@php artisan key:generate --ansi" + ] + } } diff --git a/composer.lock b/composer.lock index 3bc0054..c443064 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "d0c0458cd7bf0aa562d0e4f09f6d9d59", + "content-hash": "df5856e2a57e453bfa6710fae4d206d9", "packages": [ { "name": "asm89/stack-cors", @@ -312,30 +312,29 @@ }, { "name": "dragonmantank/cron-expression", - "version": "v2.3.0", + "version": "3.0.1", "source": { "type": "git", "url": "https://github.com/dragonmantank/cron-expression.git", - "reference": "72b6fbf76adb3cf5bc0db68559b33d41219aba27" + "reference": "fa4e95ff5a7f1d62c3fbc05c32729b7f3ca14b52" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/72b6fbf76adb3cf5bc0db68559b33d41219aba27", - "reference": "72b6fbf76adb3cf5bc0db68559b33d41219aba27", + "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/fa4e95ff5a7f1d62c3fbc05c32729b7f3ca14b52", + "reference": "fa4e95ff5a7f1d62c3fbc05c32729b7f3ca14b52", "shasum": "" }, "require": { - "php": "^7.0" + "php": "^7.1" + }, + "replace": { + "mtdowling/cron-expression": "^1.0" }, "require-dev": { + "phpstan/phpstan": "^0.11", "phpunit/phpunit": "^6.4|^7.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3-dev" - } - }, "autoload": { "psr-4": { "Cron\\": "src/Cron/" @@ -346,11 +345,6 @@ "MIT" ], "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, { "name": "Chris Tankersley", "email": "chris@ctankersley.com", @@ -362,20 +356,26 @@ "cron", "schedule" ], - "time": "2019-03-31T00:38:28+00:00" + "funding": [ + { + "url": "https://github.com/dragonmantank", + "type": "github" + } + ], + "time": "2020-08-21T02:30:13+00:00" }, { "name": "egulias/email-validator", - "version": "2.1.19", + "version": "2.1.22", "source": { "type": "git", "url": "https://github.com/egulias/EmailValidator.git", - "reference": "840d5603eb84cc81a6a0382adac3293e57c1c64c" + "reference": "68e418ec08fbfc6f58f6fd2eea70ca8efc8cc7d5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/840d5603eb84cc81a6a0382adac3293e57c1c64c", - "reference": "840d5603eb84cc81a6a0382adac3293e57c1c64c", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/68e418ec08fbfc6f58f6fd2eea70ca8efc8cc7d5", + "reference": "68e418ec08fbfc6f58f6fd2eea70ca8efc8cc7d5", "shasum": "" }, "require": { @@ -420,7 +420,7 @@ "validation", "validator" ], - "time": "2020-08-08T21:28:19+00:00" + "time": "2020-09-26T15:48:38+00:00" }, { "name": "fideloper/proxy", @@ -478,33 +478,30 @@ }, { "name": "fruitcake/laravel-cors", - "version": "v2.0.1", + "version": "v2.0.2", "source": { "type": "git", "url": "https://github.com/fruitcake/laravel-cors.git", - "reference": "dbfc311b25d4873c3c2382b26860be3567492bd6" + "reference": "4b19bfc3bd422948af37a42a62fad7f49025894a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/fruitcake/laravel-cors/zipball/dbfc311b25d4873c3c2382b26860be3567492bd6", - "reference": "dbfc311b25d4873c3c2382b26860be3567492bd6", + "url": "https://api.github.com/repos/fruitcake/laravel-cors/zipball/4b19bfc3bd422948af37a42a62fad7f49025894a", + "reference": "4b19bfc3bd422948af37a42a62fad7f49025894a", "shasum": "" }, "require": { "asm89/stack-cors": "^2.0.1", - "illuminate/contracts": "^5.6|^6.0|^7.0|^8.0", - "illuminate/support": "^5.6|^6.0|^7.0|^8.0", - "php": ">=7.1", - "symfony/http-foundation": "^4.0|^5.0", - "symfony/http-kernel": "^4.0|^5.0" + "illuminate/contracts": "^6|^7|^8", + "illuminate/support": "^6|^7|^8", + "php": ">=7.2", + "symfony/http-foundation": "^4|^5", + "symfony/http-kernel": "^4.3.4|^5" }, "require-dev": { - "laravel/framework": "^5.5|^6.0|^7.0|^8.0", - "orchestra/dusk-updater": "^1.2", - "orchestra/testbench": "^3.5|^4.0|^5.0|^6.0", - "orchestra/testbench-dusk": "^5.1", - "phpro/grumphp": "^0.16|^0.17", - "phpunit/phpunit": "^6.0|^7.0|^8.0", + "laravel/framework": "^6|^7|^8", + "orchestra/testbench-dusk": "^4|^5|^6", + "phpunit/phpunit": "^6|^7|^8", "squizlabs/php_codesniffer": "^3.5" }, "type": "library", @@ -550,41 +547,109 @@ "type": "github" } ], - "time": "2020-05-31T07:30:16+00:00" + "time": "2020-09-07T11:48:52+00:00" + }, + { + "name": "graham-campbell/result-type", + "version": "v1.0.1", + "source": { + "type": "git", + "url": "https://github.com/GrahamCampbell/Result-Type.git", + "reference": "7e279d2cd5d7fbb156ce46daada972355cea27bb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/7e279d2cd5d7fbb156ce46daada972355cea27bb", + "reference": "7e279d2cd5d7fbb156ce46daada972355cea27bb", + "shasum": "" + }, + "require": { + "php": "^7.0|^8.0", + "phpoption/phpoption": "^1.7.3" + }, + "require-dev": { + "phpunit/phpunit": "^6.5|^7.5|^8.5|^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-4": { + "GrahamCampbell\\ResultType\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "graham@alt-three.com" + } + ], + "description": "An Implementation Of The Result Type", + "keywords": [ + "Graham Campbell", + "GrahamCampbell", + "Result Type", + "Result-Type", + "result" + ], + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/graham-campbell/result-type", + "type": "tidelift" + } + ], + "time": "2020-04-13T13:17:36+00:00" }, { "name": "guzzlehttp/guzzle", - "version": "6.5.5", + "version": "7.1.0", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "9d4290de1cfd701f38099ef7e183b64b4b7b0c5e" + "reference": "7edeaa528fbb57123028bd5a76b9ce9540194e26" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/9d4290de1cfd701f38099ef7e183b64b4b7b0c5e", - "reference": "9d4290de1cfd701f38099ef7e183b64b4b7b0c5e", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/7edeaa528fbb57123028bd5a76b9ce9540194e26", + "reference": "7edeaa528fbb57123028bd5a76b9ce9540194e26", "shasum": "" }, "require": { "ext-json": "*", "guzzlehttp/promises": "^1.0", "guzzlehttp/psr7": "^1.6.1", - "php": ">=5.5", - "symfony/polyfill-intl-idn": "^1.17.0" + "php": "^7.2.5", + "psr/http-client": "^1.0" + }, + "provide": { + "psr/http-client-implementation": "1.0" }, "require-dev": { "ext-curl": "*", - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", + "php-http/client-integration-tests": "dev-phpunit8", + "phpunit/phpunit": "^8.5.5", "psr/log": "^1.1" }, "suggest": { + "ext-curl": "Required for CURL handler support", + "ext-intl": "Required for Internationalized Domain Name (IDN) support", "psr/log": "Required for using the Log middleware" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "6.5-dev" + "dev-master": "7.1-dev" } }, "autoload": { @@ -604,6 +669,11 @@ "name": "Michael Dowling", "email": "mtdowling@gmail.com", "homepage": "https://github.com/mtdowling" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://sagikazarmark.hu" } ], "description": "Guzzle is a PHP HTTP client library", @@ -614,10 +684,30 @@ "framework", "http", "http client", + "psr-18", + "psr-7", "rest", "web service" ], - "time": "2020-06-16T21:01:06+00:00" + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://github.com/alexeyshockov", + "type": "github" + }, + { + "url": "https://github.com/gmponos", + "type": "github" + } + ], + "time": "2020-09-22T09:10:04+00:00" }, { "name": "guzzlehttp/promises", @@ -743,21 +833,21 @@ }, { "name": "laravel/framework", - "version": "v7.26.1", + "version": "v8.6.0", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "fad3e5f03b9ae89853c8a0925231d2b3ce07a9c3" + "reference": "a71952a6dba55de0bb11b5fbbd84874eda2a755c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/fad3e5f03b9ae89853c8a0925231d2b3ce07a9c3", - "reference": "fad3e5f03b9ae89853c8a0925231d2b3ce07a9c3", + "url": "https://api.github.com/repos/laravel/framework/zipball/a71952a6dba55de0bb11b5fbbd84874eda2a755c", + "reference": "a71952a6dba55de0bb11b5fbbd84874eda2a755c", "shasum": "" }, "require": { "doctrine/inflector": "^1.4|^2.0", - "dragonmantank/cron-expression": "^2.0", + "dragonmantank/cron-expression": "^3.0", "egulias/email-validator": "^2.1.10", "ext-json": "*", "ext-mbstring": "*", @@ -766,24 +856,23 @@ "league/flysystem": "^1.0.34", "monolog/monolog": "^2.0", "nesbot/carbon": "^2.17", - "opis/closure": "^3.1", - "php": "^7.2.5", + "opis/closure": "^3.5.3", + "php": "^7.3", "psr/container": "^1.0", "psr/simple-cache": "^1.0", - "ramsey/uuid": "^3.7|^4.0", + "ramsey/uuid": "^4.0", "swiftmailer/swiftmailer": "^6.0", - "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/polyfill-php73": "^1.17", - "symfony/process": "^5.0", - "symfony/routing": "^5.0", - "symfony/var-dumper": "^5.0", + "symfony/console": "^5.1", + "symfony/error-handler": "^5.1", + "symfony/finder": "^5.1", + "symfony/http-foundation": "^5.1", + "symfony/http-kernel": "^5.1", + "symfony/mime": "^5.1", + "symfony/process": "^5.1", + "symfony/routing": "^5.1", + "symfony/var-dumper": "^5.1", "tijsverkoyen/css-to-inline-styles": "^2.2.2", - "vlucas/phpdotenv": "^4.0", + "vlucas/phpdotenv": "^5.2", "voku/portable-ascii": "^1.4.8" }, "conflict": { @@ -797,6 +886,7 @@ "illuminate/broadcasting": "self.version", "illuminate/bus": "self.version", "illuminate/cache": "self.version", + "illuminate/collections": "self.version", "illuminate/config": "self.version", "illuminate/console": "self.version", "illuminate/container": "self.version", @@ -809,6 +899,7 @@ "illuminate/hashing": "self.version", "illuminate/http": "self.version", "illuminate/log": "self.version", + "illuminate/macroable": "self.version", "illuminate/mail": "self.version", "illuminate/notifications": "self.version", "illuminate/pagination": "self.version", @@ -827,15 +918,14 @@ "aws/aws-sdk-php": "^3.0", "doctrine/dbal": "^2.6", "filp/whoops": "^2.4", - "guzzlehttp/guzzle": "^6.3.1|^7.0", + "guzzlehttp/guzzle": "^6.5.5|^7.0.1", "league/flysystem-cached-adapter": "^1.0", "mockery/mockery": "^1.3.1", - "moontoast/math": "^1.1", - "orchestra/testbench-core": "^5.0", + "orchestra/testbench-core": "^6.0", "pda/pheanstalk": "^4.0", "phpunit/phpunit": "^8.4|^9.0", "predis/predis": "^1.1.1", - "symfony/cache": "^5.0" + "symfony/cache": "^5.1" }, "suggest": { "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage and SES mail driver (^3.0).", @@ -848,37 +938,42 @@ "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).", + "guzzlehttp/guzzle": "Required to use the HTTP Client, Mailgun mail driver and the ping methods on schedules (^6.5.5|^7.0.1).", "laravel/tinker": "Required to use the tinker console command (^2.0).", "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^1.0).", "league/flysystem-cached-adapter": "Required to use the Flysystem cache (^1.0).", "league/flysystem-sftp": "Required to use the Flysystem SFTP driver (^1.0).", "mockery/mockery": "Required to use mocking (^1.3.1).", - "moontoast/math": "Required to use ordered UUIDs (^1.1).", "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).", "pda/pheanstalk": "Required to use the beanstalk queue driver (^4.0).", "phpunit/phpunit": "Required to use assertions and run tests (^8.4|^9.0).", "predis/predis": "Required to use the predis connector (^1.1.2).", "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/filesystem": "Required to create relative storage directory symbolic links (^5.0).", + "symfony/cache": "Required to PSR-6 cache bridge (^5.1).", + "symfony/filesystem": "Required to enable support for relative symbolic links (^5.1).", "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": "7.x-dev" + "dev-master": "8.x-dev" } }, "autoload": { "files": [ + "src/Illuminate/Collections/helpers.php", + "src/Illuminate/Events/functions.php", "src/Illuminate/Foundation/helpers.php", "src/Illuminate/Support/helpers.php" ], "psr-4": { - "Illuminate\\": "src/Illuminate/" + "Illuminate\\": "src/Illuminate/", + "Illuminate\\Support\\": [ + "src/Illuminate/Macroable/", + "src/Illuminate/Collections/" + ] } }, "notification-url": "https://packagist.org/downloads/", @@ -897,7 +992,7 @@ "framework", "laravel" ], - "time": "2020-08-27T14:22:46+00:00" + "time": "2020-09-22T13:42:02+00:00" }, { "name": "laravel/tinker", @@ -965,16 +1060,16 @@ }, { "name": "league/commonmark", - "version": "1.5.4", + "version": "1.5.5", "source": { "type": "git", "url": "https://github.com/thephpleague/commonmark.git", - "reference": "21819c989e69bab07e933866ad30c7e3f32984ba" + "reference": "45832dfed6007b984c0d40addfac48d403dc6432" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/21819c989e69bab07e933866ad30c7e3f32984ba", - "reference": "21819c989e69bab07e933866ad30c7e3f32984ba", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/45832dfed6007b984c0d40addfac48d403dc6432", + "reference": "45832dfed6007b984c0d40addfac48d403dc6432", "shasum": "" }, "require": { @@ -986,7 +1081,7 @@ }, "require-dev": { "cebe/markdown": "~1.0", - "commonmark/commonmark.js": "0.29.1", + "commonmark/commonmark.js": "0.29.2", "erusev/parsedown": "~1.0", "ext-json": "*", "github/gfm": "0.29.0", @@ -1056,7 +1151,7 @@ "type": "tidelift" } ], - "time": "2020-08-18T01:19:12+00:00" + "time": "2020-09-13T14:44:46+00:00" }, { "name": "league/flysystem", @@ -1151,16 +1246,16 @@ }, { "name": "league/mime-type-detection", - "version": "1.4.0", + "version": "1.5.0", "source": { "type": "git", "url": "https://github.com/thephpleague/mime-type-detection.git", - "reference": "fda190b62b962d96a069fcc414d781db66d65b69" + "reference": "ea2fbfc988bade315acd5967e6d02274086d0f28" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/fda190b62b962d96a069fcc414d781db66d65b69", - "reference": "fda190b62b962d96a069fcc414d781db66d65b69", + "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/ea2fbfc988bade315acd5967e6d02274086d0f28", + "reference": "ea2fbfc988bade315acd5967e6d02274086d0f28", "shasum": "" }, "require": { @@ -1198,7 +1293,7 @@ "type": "tidelift" } ], - "time": "2020-08-09T10:34:01+00:00" + "time": "2020-09-21T18:10:53+00:00" }, { "name": "monolog/monolog", @@ -1293,16 +1388,16 @@ }, { "name": "nesbot/carbon", - "version": "2.39.0", + "version": "2.40.1", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "0a41ea7f7fedacf307b7a339800e10356a042918" + "reference": "d9a76d8b7eb0f97cf3a82529393245212f40ba3b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/0a41ea7f7fedacf307b7a339800e10356a042918", - "reference": "0a41ea7f7fedacf307b7a339800e10356a042918", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/d9a76d8b7eb0f97cf3a82529393245212f40ba3b", + "reference": "d9a76d8b7eb0f97cf3a82529393245212f40ba3b", "shasum": "" }, "require": { @@ -1315,7 +1410,7 @@ "doctrine/orm": "^2.7", "friendsofphp/php-cs-fixer": "^2.14 || ^3.0", "kylekatarnls/multi-tester": "^2.0", - "phpmd/phpmd": "^2.8", + "phpmd/phpmd": "^2.9", "phpstan/extension-installer": "^1.0", "phpstan/phpstan": "^0.12.35", "phpunit/phpunit": "^7.5 || ^8.0", @@ -1378,20 +1473,20 @@ "type": "tidelift" } ], - "time": "2020-08-24T12:35:58+00:00" + "time": "2020-09-23T08:17:37+00:00" }, { "name": "nikic/php-parser", - "version": "v4.9.1", + "version": "v4.10.2", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "88e519766fc58bd46b8265561fb79b54e2e00b28" + "reference": "658f1be311a230e0907f5dfe0213742aff0596de" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/88e519766fc58bd46b8265561fb79b54e2e00b28", - "reference": "88e519766fc58bd46b8265561fb79b54e2e00b28", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/658f1be311a230e0907f5dfe0213742aff0596de", + "reference": "658f1be311a230e0907f5dfe0213742aff0596de", "shasum": "" }, "require": { @@ -1430,20 +1525,20 @@ "parser", "php" ], - "time": "2020-08-30T16:15:20+00:00" + "time": "2020-09-26T10:30:38+00:00" }, { "name": "opis/closure", - "version": "3.5.6", + "version": "3.5.7", "source": { "type": "git", "url": "https://github.com/opis/closure.git", - "reference": "e8d34df855b0a0549a300cb8cb4db472556e8aa9" + "reference": "4531e53afe2fc660403e76fb7644e95998bff7bf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/opis/closure/zipball/e8d34df855b0a0549a300cb8cb4db472556e8aa9", - "reference": "e8d34df855b0a0549a300cb8cb4db472556e8aa9", + "url": "https://api.github.com/repos/opis/closure/zipball/4531e53afe2fc660403e76fb7644e95998bff7bf", + "reference": "4531e53afe2fc660403e76fb7644e95998bff7bf", "shasum": "" }, "require": { @@ -1491,7 +1586,7 @@ "serialization", "serialize" ], - "time": "2020-08-11T08:46:50+00:00" + "time": "2020-09-06T17:02:15+00:00" }, { "name": "paragonie/random_compat", @@ -1698,6 +1793,55 @@ ], "time": "2019-01-08T18:20:26+00:00" }, + { + "name": "psr/http-client", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-client.git", + "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", + "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0", + "psr/http-message": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP clients", + "homepage": "https://github.com/php-fig/http-client", + "keywords": [ + "http", + "http-client", + "psr", + "psr-18" + ], + "time": "2020-06-29T06:28:15+00:00" + }, { "name": "psr/http-message", "version": "1.0.1", @@ -1957,16 +2101,16 @@ }, { "name": "ramsey/collection", - "version": "1.1.0", + "version": "1.1.1", "source": { "type": "git", "url": "https://github.com/ramsey/collection.git", - "reference": "044184884e3c803e4cbb6451386cb71562939b18" + "reference": "24d93aefb2cd786b7edd9f45b554aea20b28b9b1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/collection/zipball/044184884e3c803e4cbb6451386cb71562939b18", - "reference": "044184884e3c803e4cbb6451386cb71562939b18", + "url": "https://api.github.com/repos/ramsey/collection/zipball/24d93aefb2cd786b7edd9f45b554aea20b28b9b1", + "reference": "24d93aefb2cd786b7edd9f45b554aea20b28b9b1", "shasum": "" }, "require": { @@ -2022,7 +2166,7 @@ "type": "github" } ], - "time": "2020-08-11T00:57:21+00:00" + "time": "2020-09-10T20:58:17+00:00" }, { "name": "ramsey/uuid", @@ -2175,16 +2319,16 @@ }, { "name": "symfony/console", - "version": "v5.1.4", + "version": "v5.1.5", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "51ff337ce194bdc3d8db12b20ce8cd54ac9f71e9" + "reference": "186f395b256065ba9b890c0a4e48a91d598fa2cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/51ff337ce194bdc3d8db12b20ce8cd54ac9f71e9", - "reference": "51ff337ce194bdc3d8db12b20ce8cd54ac9f71e9", + "url": "https://api.github.com/repos/symfony/console/zipball/186f395b256065ba9b890c0a4e48a91d598fa2cf", + "reference": "186f395b256065ba9b890c0a4e48a91d598fa2cf", "shasum": "" }, "require": { @@ -2264,11 +2408,11 @@ "type": "tidelift" } ], - "time": "2020-08-17T13:51:41+00:00" + "time": "2020-09-02T07:07:40+00:00" }, { "name": "symfony/css-selector", - "version": "v5.1.4", + "version": "v5.1.5", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", @@ -2335,16 +2479,16 @@ }, { "name": "symfony/deprecation-contracts", - "version": "v2.1.3", + "version": "v2.2.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "5e20b83385a77593259c9f8beb2c43cd03b2ac14" + "reference": "5fa56b4074d1ae755beb55617ddafe6f5d78f665" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5e20b83385a77593259c9f8beb2c43cd03b2ac14", - "reference": "5e20b83385a77593259c9f8beb2c43cd03b2ac14", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5fa56b4074d1ae755beb55617ddafe6f5d78f665", + "reference": "5fa56b4074d1ae755beb55617ddafe6f5d78f665", "shasum": "" }, "require": { @@ -2353,7 +2497,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.1-dev" + "dev-master": "2.2-dev" }, "thanks": { "name": "symfony/contracts", @@ -2395,11 +2539,11 @@ "type": "tidelift" } ], - "time": "2020-06-06T08:49:21+00:00" + "time": "2020-09-07T11:33:47+00:00" }, { "name": "symfony/error-handler", - "version": "v5.1.4", + "version": "v5.1.5", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", @@ -2470,7 +2614,7 @@ }, { "name": "symfony/event-dispatcher", - "version": "v5.1.4", + "version": "v5.1.5", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", @@ -2556,16 +2700,16 @@ }, { "name": "symfony/event-dispatcher-contracts", - "version": "v2.1.3", + "version": "v2.2.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "f6f613d74cfc5a623fc36294d3451eb7fa5a042b" + "reference": "0ba7d54483095a198fa51781bc608d17e84dffa2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/f6f613d74cfc5a623fc36294d3451eb7fa5a042b", - "reference": "f6f613d74cfc5a623fc36294d3451eb7fa5a042b", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/0ba7d54483095a198fa51781bc608d17e84dffa2", + "reference": "0ba7d54483095a198fa51781bc608d17e84dffa2", "shasum": "" }, "require": { @@ -2578,7 +2722,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.1-dev" + "dev-master": "2.2-dev" }, "thanks": { "name": "symfony/contracts", @@ -2628,11 +2772,11 @@ "type": "tidelift" } ], - "time": "2020-07-06T13:23:11+00:00" + "time": "2020-09-07T11:33:47+00:00" }, { "name": "symfony/finder", - "version": "v5.1.4", + "version": "v5.1.5", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", @@ -2695,7 +2839,7 @@ }, { "name": "symfony/http-foundation", - "version": "v5.1.4", + "version": "v5.1.5", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", @@ -2770,16 +2914,16 @@ }, { "name": "symfony/http-kernel", - "version": "v5.1.4", + "version": "v5.1.5", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "f829c240113986b60fda425c2533142e88efd7c4" + "reference": "3e32676e6cb5d2081c91a56783471ff8a7f7110b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/f829c240113986b60fda425c2533142e88efd7c4", - "reference": "f829c240113986b60fda425c2533142e88efd7c4", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/3e32676e6cb5d2081c91a56783471ff8a7f7110b", + "reference": "3e32676e6cb5d2081c91a56783471ff8a7f7110b", "shasum": "" }, "require": { @@ -2879,11 +3023,11 @@ "type": "tidelift" } ], - "time": "2020-08-31T06:18:12+00:00" + "time": "2020-09-02T08:15:18+00:00" }, { "name": "symfony/mime", - "version": "v5.1.4", + "version": "v5.1.5", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", @@ -3740,7 +3884,7 @@ }, { "name": "symfony/process", - "version": "v5.1.4", + "version": "v5.1.5", "source": { "type": "git", "url": "https://github.com/symfony/process.git", @@ -3804,7 +3948,7 @@ }, { "name": "symfony/routing", - "version": "v5.1.4", + "version": "v5.1.5", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", @@ -3896,16 +4040,16 @@ }, { "name": "symfony/service-contracts", - "version": "v2.1.3", + "version": "v2.2.0", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "58c7475e5457c5492c26cc740cc0ad7464be9442" + "reference": "d15da7ba4957ffb8f1747218be9e1a121fd298a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/58c7475e5457c5492c26cc740cc0ad7464be9442", - "reference": "58c7475e5457c5492c26cc740cc0ad7464be9442", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/d15da7ba4957ffb8f1747218be9e1a121fd298a1", + "reference": "d15da7ba4957ffb8f1747218be9e1a121fd298a1", "shasum": "" }, "require": { @@ -3918,7 +4062,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.1-dev" + "dev-master": "2.2-dev" }, "thanks": { "name": "symfony/contracts", @@ -3968,11 +4112,11 @@ "type": "tidelift" } ], - "time": "2020-07-06T13:23:11+00:00" + "time": "2020-09-07T11:33:47+00:00" }, { "name": "symfony/string", - "version": "v5.1.4", + "version": "v5.1.5", "source": { "type": "git", "url": "https://github.com/symfony/string.git", @@ -4057,7 +4201,7 @@ }, { "name": "symfony/translation", - "version": "v5.1.4", + "version": "v5.1.5", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", @@ -4149,16 +4293,16 @@ }, { "name": "symfony/translation-contracts", - "version": "v2.1.3", + "version": "v2.2.0", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "616a9773c853097607cf9dd6577d5b143ffdcd63" + "reference": "77ce1c3627c9f39643acd9af086631f842c50c4d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/616a9773c853097607cf9dd6577d5b143ffdcd63", - "reference": "616a9773c853097607cf9dd6577d5b143ffdcd63", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/77ce1c3627c9f39643acd9af086631f842c50c4d", + "reference": "77ce1c3627c9f39643acd9af086631f842c50c4d", "shasum": "" }, "require": { @@ -4170,7 +4314,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.1-dev" + "dev-master": "2.2-dev" }, "thanks": { "name": "symfony/contracts", @@ -4220,11 +4364,11 @@ "type": "tidelift" } ], - "time": "2020-07-06T13:23:11+00:00" + "time": "2020-09-07T11:33:47+00:00" }, { "name": "symfony/var-dumper", - "version": "v5.1.4", + "version": "v5.1.5", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", @@ -4363,37 +4507,39 @@ }, { "name": "vlucas/phpdotenv", - "version": "v4.1.8", + "version": "v5.2.0", "source": { "type": "git", "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "572af79d913627a9d70374d27a6f5d689a35de32" + "reference": "fba64139db67123c7a57072e5f8d3db10d160b66" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/572af79d913627a9d70374d27a6f5d689a35de32", - "reference": "572af79d913627a9d70374d27a6f5d689a35de32", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/fba64139db67123c7a57072e5f8d3db10d160b66", + "reference": "fba64139db67123c7a57072e5f8d3db10d160b66", "shasum": "" }, "require": { - "php": "^5.5.9 || ^7.0 || ^8.0", - "phpoption/phpoption": "^1.7.3", - "symfony/polyfill-ctype": "^1.17" + "ext-pcre": "*", + "graham-campbell/result-type": "^1.0.1", + "php": "^7.1.3 || ^8.0", + "phpoption/phpoption": "^1.7.4", + "symfony/polyfill-ctype": "^1.17", + "symfony/polyfill-mbstring": "^1.17", + "symfony/polyfill-php80": "^1.17" }, "require-dev": { "bamarni/composer-bin-plugin": "^1.4.1", "ext-filter": "*", - "ext-pcre": "*", - "phpunit/phpunit": "^4.8.35 || ^5.7.27 || ^6.5.6 || ^7.0" + "phpunit/phpunit": "^7.5.20 || ^8.5.2 || ^9.0" }, "suggest": { - "ext-filter": "Required to use the boolean validator.", - "ext-pcre": "Required to use most of the library." + "ext-filter": "Required to use the boolean validator." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.1-dev" + "dev-master": "5.2-dev" } }, "autoload": { @@ -4433,7 +4579,7 @@ "type": "tidelift" } ], - "time": "2020-07-14T19:22:52+00:00" + "time": "2020-09-14T15:57:31+00:00" }, { "name": "voku/portable-ascii", @@ -4579,16 +4725,16 @@ }, { "name": "facade/flare-client-php", - "version": "1.3.5", + "version": "1.3.6", "source": { "type": "git", "url": "https://github.com/facade/flare-client-php.git", - "reference": "25907a113bfc212a38d458ae365bfb902b4e7fb8" + "reference": "451fadf38e9f635e7f8e1f5b3cf5c9eb82f11799" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/facade/flare-client-php/zipball/25907a113bfc212a38d458ae365bfb902b4e7fb8", - "reference": "25907a113bfc212a38d458ae365bfb902b4e7fb8", + "url": "https://api.github.com/repos/facade/flare-client-php/zipball/451fadf38e9f635e7f8e1f5b3cf5c9eb82f11799", + "reference": "451fadf38e9f635e7f8e1f5b3cf5c9eb82f11799", "shasum": "" }, "require": { @@ -4601,7 +4747,6 @@ }, "require-dev": { "friendsofphp/php-cs-fixer": "^2.14", - "larapack/dd": "^1.1", "phpunit/phpunit": "^7.5.16", "spatie/phpunit-snapshot-assertions": "^2.0" }, @@ -4637,20 +4782,20 @@ "type": "github" } ], - "time": "2020-08-26T18:06:23+00:00" + "time": "2020-09-18T06:35:11+00:00" }, { "name": "facade/ignition", - "version": "2.3.6", + "version": "2.3.7", "source": { "type": "git", "url": "https://github.com/facade/ignition.git", - "reference": "d7d05dba5a0bdbf018a2cb7be268f22f5d73eb81" + "reference": "b364db8860a63c1fb58b72b9718863c21df08762" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/facade/ignition/zipball/d7d05dba5a0bdbf018a2cb7be268f22f5d73eb81", - "reference": "d7d05dba5a0bdbf018a2cb7be268f22f5d73eb81", + "url": "https://api.github.com/repos/facade/ignition/zipball/b364db8860a63c1fb58b72b9718863c21df08762", + "reference": "b364db8860a63c1fb58b72b9718863c21df08762", "shasum": "" }, "require": { @@ -4669,7 +4814,7 @@ "require-dev": { "friendsofphp/php-cs-fixer": "^2.14", "mockery/mockery": "^1.3", - "orchestra/testbench": "5.0", + "orchestra/testbench": "^5.0|^6.0", "psalm/plugin-laravel": "^1.2" }, "suggest": { @@ -4709,7 +4854,7 @@ "laravel", "page" ], - "time": "2020-08-10T13:50:38+00:00" + "time": "2020-09-06T19:26:27+00:00" }, { "name": "facade/ignition-contracts", @@ -5042,35 +5187,35 @@ }, { "name": "nunomaduro/collision", - "version": "v4.2.0", + "version": "v5.0.2", "source": { "type": "git", "url": "https://github.com/nunomaduro/collision.git", - "reference": "d50490417eded97be300a92cd7df7badc37a9018" + "reference": "4a343299054e9368d0db4a982a780cc4ffa12707" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/collision/zipball/d50490417eded97be300a92cd7df7badc37a9018", - "reference": "d50490417eded97be300a92cd7df7badc37a9018", + "url": "https://api.github.com/repos/nunomaduro/collision/zipball/4a343299054e9368d0db4a982a780cc4ffa12707", + "reference": "4a343299054e9368d0db4a982a780cc4ffa12707", "shasum": "" }, "require": { "facade/ignition-contracts": "^1.0", - "filp/whoops": "^2.4", - "php": "^7.2.5", + "filp/whoops": "^2.7.2", + "php": "^7.3", "symfony/console": "^5.0" }, "require-dev": { - "facade/ignition": "^2.0", - "fideloper/proxy": "^4.2", - "friendsofphp/php-cs-fixer": "^2.16", - "fruitcake/laravel-cors": "^1.0", - "laravel/framework": "^7.0", - "laravel/tinker": "^2.0", - "nunomaduro/larastan": "^0.5", - "orchestra/testbench": "^5.0", - "phpstan/phpstan": "^0.12.3", - "phpunit/phpunit": "^8.5.1 || ^9.0" + "fideloper/proxy": "^4.4.0", + "friendsofphp/php-cs-fixer": "^2.16.4", + "fruitcake/laravel-cors": "^2.0.1", + "laravel/framework": "^8.0", + "laravel/tinker": "^2.4.1", + "nunomaduro/larastan": "^0.6.2", + "nunomaduro/mock-final-classes": "^1.0", + "orchestra/testbench": "^6.0", + "phpstan/phpstan": "^0.12.36", + "phpunit/phpunit": "^9.3.3" }, "type": "library", "extra": { @@ -5122,32 +5267,33 @@ "type": "patreon" } ], - "time": "2020-04-04T19:56:08+00:00" + "time": "2020-08-27T18:58:22+00:00" }, { "name": "phar-io/manifest", - "version": "1.0.3", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/phar-io/manifest.git", - "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4" + "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", - "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", + "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", "shasum": "" }, "require": { "ext-dom": "*", "ext-phar": "*", - "phar-io/version": "^2.0", - "php": "^5.6 || ^7.0" + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -5177,24 +5323,24 @@ } ], "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", - "time": "2018-07-08T19:23:20+00:00" + "time": "2020-06-27T14:33:11+00:00" }, { "name": "phar-io/version", - "version": "2.0.1", + "version": "3.0.2", "source": { "type": "git", "url": "https://github.com/phar-io/version.git", - "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6" + "reference": "c6bb6825def89e0a32220f88337f8ceaf1975fa0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/45a2ec53a73c70ce41d55cedef9063630abaf1b6", - "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6", + "url": "https://api.github.com/repos/phar-io/version/zipball/c6bb6825def89e0a32220f88337f8ceaf1975fa0", + "reference": "c6bb6825def89e0a32220f88337f8ceaf1975fa0", "shasum": "" }, "require": { - "php": "^5.6 || ^7.0" + "php": "^7.2 || ^8.0" }, "type": "library", "autoload": { @@ -5224,7 +5370,7 @@ } ], "description": "Library for handling version information and constraints", - "time": "2018-07-08T19:19:57+00:00" + "time": "2020-06-27T14:39:04+00:00" }, { "name": "phpdocumentor/reflection-common", @@ -5277,16 +5423,16 @@ }, { "name": "phpdocumentor/reflection-docblock", - "version": "5.2.1", + "version": "5.2.2", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "d870572532cd70bc3fab58f2e23ad423c8404c44" + "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/d870572532cd70bc3fab58f2e23ad423c8404c44", - "reference": "d870572532cd70bc3fab58f2e23ad423c8404c44", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556", + "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556", "shasum": "" }, "require": { @@ -5325,20 +5471,20 @@ } ], "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "time": "2020-08-15T11:14:08+00:00" + "time": "2020-09-03T19:13:55+00:00" }, { "name": "phpdocumentor/type-resolver", - "version": "1.3.0", + "version": "1.4.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "e878a14a65245fbe78f8080eba03b47c3b705651" + "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/e878a14a65245fbe78f8080eba03b47c3b705651", - "reference": "e878a14a65245fbe78f8080eba03b47c3b705651", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", + "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", "shasum": "" }, "require": { @@ -5370,7 +5516,7 @@ } ], "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", - "time": "2020-06-27T10:12:23+00:00" + "time": "2020-09-17T18:55:26+00:00" }, { "name": "phpspec/prophecy", @@ -5437,40 +5583,44 @@ }, { "name": "phpunit/php-code-coverage", - "version": "7.0.10", + "version": "9.1.11", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "f1884187926fbb755a9aaf0b3836ad3165b478bf" + "reference": "c9394cb9d07ecfa9351b96f2e296bad473195f4d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f1884187926fbb755a9aaf0b3836ad3165b478bf", - "reference": "f1884187926fbb755a9aaf0b3836ad3165b478bf", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/c9394cb9d07ecfa9351b96f2e296bad473195f4d", + "reference": "c9394cb9d07ecfa9351b96f2e296bad473195f4d", "shasum": "" }, "require": { "ext-dom": "*", + "ext-libxml": "*", "ext-xmlwriter": "*", - "php": "^7.2", - "phpunit/php-file-iterator": "^2.0.2", - "phpunit/php-text-template": "^1.2.1", - "phpunit/php-token-stream": "^3.1.1", - "sebastian/code-unit-reverse-lookup": "^1.0.1", - "sebastian/environment": "^4.2.2", - "sebastian/version": "^2.0.1", - "theseer/tokenizer": "^1.1.3" + "nikic/php-parser": "^4.8", + "php": ">=7.3", + "phpunit/php-file-iterator": "^3.0.3", + "phpunit/php-text-template": "^2.0.2", + "sebastian/code-unit-reverse-lookup": "^2.0.2", + "sebastian/complexity": "^2.0", + "sebastian/environment": "^5.1.2", + "sebastian/lines-of-code": "^1.0", + "sebastian/version": "^3.0.1", + "theseer/tokenizer": "^1.2.0" }, "require-dev": { - "phpunit/phpunit": "^8.2.2" + "phpunit/phpunit": "^9.3" }, "suggest": { - "ext-xdebug": "^2.7.2" + "ext-pcov": "*", + "ext-xdebug": "*" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "7.0-dev" + "dev-master": "9.1-dev" } }, "autoload": { @@ -5496,32 +5646,38 @@ "testing", "xunit" ], - "time": "2019-11-20T13:55:58+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-19T05:29:17+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "2.0.2", + "version": "3.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "050bedf145a257b1ff02746c31894800e5122946" + "reference": "25fefc5b19835ca653877fe081644a3f8c1d915e" }, "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/25fefc5b19835ca653877fe081644a3f8c1d915e", + "reference": "25fefc5b19835ca653877fe081644a3f8c1d915e", "shasum": "" }, "require": { - "php": "^7.1" + "php": "^7.3 || ^8.0" }, "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": { @@ -5546,26 +5702,44 @@ "filesystem", "iterator" ], - "time": "2018-09-13T20:33:42+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-07-11T05:18:21+00:00" }, { - "name": "phpunit/php-text-template", - "version": "1.2.1", + "name": "phpunit/php-invoker", + "version": "3.1.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "7a85b66acc48cacffdf87dadd3694e7123674298" }, "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-invoker/zipball/7a85b66acc48cacffdf87dadd3694e7123674298", + "reference": "7a85b66acc48cacffdf87dadd3694e7123674298", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^7.3 || ^8.0" + }, + "require-dev": { + "ext-pcntl": "*", + "phpunit/phpunit": "^9.0" + }, + "suggest": { + "ext-pcntl": "*" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1-dev" + } + }, "autoload": { "classmap": [ "src/" @@ -5582,37 +5756,43 @@ "role": "lead" } ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "description": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", "keywords": [ - "template" + "process" ], - "time": "2015-06-21T13:50:34+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-08-06T07:04:15+00:00" }, { - "name": "phpunit/php-timer", - "version": "2.1.2", + "name": "phpunit/php-text-template", + "version": "2.0.2", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "1038454804406b0b5f5f520358e78c1c2f71501e" + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "6ff9c8ea4d3212b88fcf74e25e516e2c51c99324" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/1038454804406b0b5f5f520358e78c1c2f71501e", - "reference": "1038454804406b0b5f5f520358e78c1c2f71501e", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/6ff9c8ea4d3212b88fcf74e25e516e2c51c99324", + "reference": "6ff9c8ea4d3212b88fcf74e25e516e2c51c99324", "shasum": "" }, "require": { - "php": "^7.1" + "php": "^7.3 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^7.0" + "phpunit/phpunit": "^9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.1-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -5631,38 +5811,43 @@ "role": "lead" } ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", "keywords": [ - "timer" + "template" + ], + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } ], - "time": "2019-06-07T04:22:29+00:00" + "time": "2020-06-26T11:55:37+00:00" }, { - "name": "phpunit/php-token-stream", - "version": "3.1.1", + "name": "phpunit/php-timer", + "version": "5.0.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "995192df77f63a59e47f025390d2d1fdf8f425ff" + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "cc49734779cbb302bf51a44297dab8c4bbf941e7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/995192df77f63a59e47f025390d2d1fdf8f425ff", - "reference": "995192df77f63a59e47f025390d2d1fdf8f425ff", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/cc49734779cbb302bf51a44297dab8c4bbf941e7", + "reference": "cc49734779cbb302bf51a44297dab8c4bbf941e7", "shasum": "" }, "require": { - "ext-tokenizer": "*", - "php": "^7.1" + "php": "^7.3 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^7.0" + "phpunit/phpunit": "^9.2" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "5.0-dev" } }, "autoload": { @@ -5677,65 +5862,74 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Wrapper around PHP's tokenizer extension.", - "homepage": "https://github.com/sebastianbergmann/php-token-stream/", + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", "keywords": [ - "tokenizer" + "timer" + ], + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } ], - "abandoned": true, - "time": "2019-09-17T06:23:10+00:00" + "time": "2020-06-26T11:58:13+00:00" }, { "name": "phpunit/phpunit", - "version": "8.5.8", + "version": "9.3.11", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "34c18baa6a44f1d1fbf0338907139e9dce95b997" + "reference": "f7316ea106df7c9507f4fdaa88c47bc10a3b27a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/34c18baa6a44f1d1fbf0338907139e9dce95b997", - "reference": "34c18baa6a44f1d1fbf0338907139e9dce95b997", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/f7316ea106df7c9507f4fdaa88c47bc10a3b27a1", + "reference": "f7316ea106df7c9507f4fdaa88c47bc10a3b27a1", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.2.0", + "doctrine/instantiator": "^1.3.1", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", "ext-mbstring": "*", "ext-xml": "*", "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.9.1", - "phar-io/manifest": "^1.0.3", - "phar-io/version": "^2.0.1", - "php": "^7.2", - "phpspec/prophecy": "^1.8.1", - "phpunit/php-code-coverage": "^7.0.7", - "phpunit/php-file-iterator": "^2.0.2", - "phpunit/php-text-template": "^1.2.1", - "phpunit/php-timer": "^2.1.2", - "sebastian/comparator": "^3.0.2", - "sebastian/diff": "^3.0.2", - "sebastian/environment": "^4.2.2", - "sebastian/exporter": "^3.1.1", - "sebastian/global-state": "^3.0.0", - "sebastian/object-enumerator": "^3.0.3", - "sebastian/resource-operations": "^2.0.1", - "sebastian/type": "^1.1.3", - "sebastian/version": "^2.0.1" + "myclabs/deep-copy": "^1.10.1", + "phar-io/manifest": "^2.0.1", + "phar-io/version": "^3.0.2", + "php": ">=7.3", + "phpspec/prophecy": "^1.11.1", + "phpunit/php-code-coverage": "^9.1.11", + "phpunit/php-file-iterator": "^3.0.4", + "phpunit/php-invoker": "^3.1", + "phpunit/php-text-template": "^2.0.2", + "phpunit/php-timer": "^5.0.1", + "sebastian/cli-parser": "^1.0", + "sebastian/code-unit": "^1.0.5", + "sebastian/comparator": "^4.0.3", + "sebastian/diff": "^4.0.2", + "sebastian/environment": "^5.1.2", + "sebastian/exporter": "^4.0.2", + "sebastian/global-state": "^5.0", + "sebastian/object-enumerator": "^4.0.2", + "sebastian/resource-operations": "^3.0.2", + "sebastian/type": "^2.2.1", + "sebastian/version": "^3.0.1" }, "require-dev": { - "ext-pdo": "*" + "ext-pdo": "*", + "phpspec/prophecy-phpunit": "^2.0.1" }, "suggest": { "ext-soap": "*", - "ext-xdebug": "*", - "phpunit/php-invoker": "^2.0.0" + "ext-xdebug": "*" }, "bin": [ "phpunit" @@ -5743,12 +5937,15 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "8.5-dev" + "dev-master": "9.3-dev" } }, "autoload": { "classmap": [ "src/" + ], + "files": [ + "src/Framework/Assert/Functions.php" ] }, "notification-url": "https://packagist.org/downloads/", @@ -5779,7 +5976,7 @@ "type": "github" } ], - "time": "2020-06-22T07:06:58+00:00" + "time": "2020-09-24T08:08:49+00:00" }, { "name": "scrivo/highlight.php", @@ -5857,29 +6054,29 @@ "time": "2020-08-27T03:24:44+00:00" }, { - "name": "sebastian/code-unit-reverse-lookup", - "version": "1.0.1", + "name": "sebastian/cli-parser", + "version": "1.0.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18" + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "2a4a38c56e62f7295bedb8b1b7439ad523d4ea82" }, "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/cli-parser/zipball/2a4a38c56e62f7295bedb8b1b7439ad523d4ea82", + "reference": "2a4a38c56e62f7295bedb8b1b7439ad523d4ea82", "shasum": "" }, "require": { - "php": "^5.6 || ^7.0" + "php": "^7.3 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^5.7 || ^6.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.0-dev" } }, "autoload": { @@ -5894,39 +6091,149 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "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" + "description": "Library for parsing CLI options", + "homepage": "https://github.com/sebastianbergmann/cli-parser", + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-08-12T10:49:21+00:00" }, { - "name": "sebastian/comparator", - "version": "3.0.2", + "name": "sebastian/code-unit", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "c1e2df332c905079980b119c4db103117e5e5c90" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/c1e2df332c905079980b119c4db103117e5e5c90", + "reference": "c1e2df332c905079980b119c4db103117e5e5c90", + "shasum": "" + }, + "require": { + "php": "^7.3 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the PHP code units", + "homepage": "https://github.com/sebastianbergmann/code-unit", + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-26T12:50:45+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "ee51f9bb0c6d8a43337055db3120829fa14da819" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ee51f9bb0c6d8a43337055db3120829fa14da819", + "reference": "ee51f9bb0c6d8a43337055db3120829fa14da819", + "shasum": "" + }, + "require": { + "php": "^7.3 || ^8.0" + }, + "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" + } + ], + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-26T12:04:00+00:00" + }, + { + "name": "sebastian/comparator", + "version": "4.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da" + "reference": "dcc580eadfaa4e7f9d2cf9ae1922134ea962e14f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/5de4fc177adf9bce8df98d8d141a7559d7ccf6da", - "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/dcc580eadfaa4e7f9d2cf9ae1922134ea962e14f", + "reference": "dcc580eadfaa4e7f9d2cf9ae1922134ea962e14f", "shasum": "" }, "require": { - "php": "^7.1", - "sebastian/diff": "^3.0", - "sebastian/exporter": "^3.1" + "php": "^7.3 || ^8.0", + "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": { @@ -5939,6 +6246,10 @@ "BSD-3-Clause" ], "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, { "name": "Jeff Welch", "email": "whatthejeff@gmail.com" @@ -5950,10 +6261,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", @@ -5963,33 +6270,92 @@ "compare", "equality" ], - "time": "2018-07-12T15:12:46+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-26T12:05:46+00:00" + }, + { + "name": "sebastian/complexity", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "33fcd6a26656c6546f70871244ecba4b4dced097" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/33fcd6a26656c6546f70871244ecba4b4dced097", + "reference": "33fcd6a26656c6546f70871244ecba4b4dced097", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.7", + "php": "^7.3 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for calculating the complexity of PHP code units", + "homepage": "https://github.com/sebastianbergmann/complexity", + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-07-25T14:01:34+00:00" }, { "name": "sebastian/diff", - "version": "3.0.2", + "version": "4.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29" + "reference": "1e90b4cf905a7d06c420b1d2e9d11a4dc8a13113" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/720fcc7e9b5cf384ea68d9d930d480907a0c1a29", - "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/1e90b4cf905a7d06c420b1d2e9d11a4dc8a13113", + "reference": "1e90b4cf905a7d06c420b1d2e9d11a4dc8a13113", "shasum": "" }, "require": { - "php": "^7.1" + "php": "^7.3 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^7.5 || ^8.0", - "symfony/process": "^2 || ^3.3 || ^4" + "phpunit/phpunit": "^9.0", + "symfony/process": "^4.2 || ^5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -6002,13 +6368,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", @@ -6019,27 +6385,33 @@ "unidiff", "unified diff" ], - "time": "2019-02-04T06:01:07+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-30T04:46:02+00:00" }, { "name": "sebastian/environment", - "version": "4.2.3", + "version": "5.1.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "464c90d7bdf5ad4e8a6aea15c091fec0603d4368" + "reference": "0a757cab9d5b7ef49a619f1143e6c9c1bc0fe9d2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/464c90d7bdf5ad4e8a6aea15c091fec0603d4368", - "reference": "464c90d7bdf5ad4e8a6aea15c091fec0603d4368", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/0a757cab9d5b7ef49a619f1143e6c9c1bc0fe9d2", + "reference": "0a757cab9d5b7ef49a619f1143e6c9c1bc0fe9d2", "shasum": "" }, "require": { - "php": "^7.1" + "php": "^7.3 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^7.5" + "phpunit/phpunit": "^9.0" }, "suggest": { "ext-posix": "*" @@ -6047,7 +6419,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.2-dev" + "dev-master": "5.0-dev" } }, "autoload": { @@ -6072,34 +6444,40 @@ "environment", "hhvm" ], - "time": "2019-11-20T08:46:58+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-26T12:07:24+00:00" }, { "name": "sebastian/exporter", - "version": "3.1.2", + "version": "4.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e" + "reference": "571d721db4aec847a0e59690b954af33ebf9f023" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/68609e1261d215ea5b21b7987539cbfbe156ec3e", - "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/571d721db4aec847a0e59690b954af33ebf9f023", + "reference": "571d721db4aec847a0e59690b954af33ebf9f023", "shasum": "" }, "require": { - "php": "^7.0", - "sebastian/recursion-context": "^3.0" + "php": "^7.3 || ^8.0", + "sebastian/recursion-context": "^4.0" }, "require-dev": { "ext-mbstring": "*", - "phpunit/phpunit": "^6.0" + "phpunit/phpunit": "^9.2" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1.x-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -6139,30 +6517,36 @@ "export", "exporter" ], - "time": "2019-09-14T09:02:43+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-26T12:08:55+00:00" }, { "name": "sebastian/global-state", - "version": "3.0.0", + "version": "5.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "edf8a461cf1d4005f19fb0b6b8b95a9f7fa0adc4" + "reference": "22ae663c951bdc39da96603edc3239ed3a299097" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/edf8a461cf1d4005f19fb0b6b8b95a9f7fa0adc4", - "reference": "edf8a461cf1d4005f19fb0b6b8b95a9f7fa0adc4", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/22ae663c951bdc39da96603edc3239ed3a299097", + "reference": "22ae663c951bdc39da96603edc3239ed3a299097", "shasum": "" }, "require": { - "php": "^7.2", - "sebastian/object-reflector": "^1.1.1", - "sebastian/recursion-context": "^3.0" + "php": "^7.3 || ^8.0", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" }, "require-dev": { "ext-dom": "*", - "phpunit/phpunit": "^8.0" + "phpunit/phpunit": "^9.3" }, "suggest": { "ext-uopz": "*" @@ -6170,7 +6554,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "5.0-dev" } }, "autoload": { @@ -6193,34 +6577,93 @@ "keywords": [ "global state" ], - "time": "2019-02-01T05:30:01+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-08-07T04:09:03+00:00" + }, + { + "name": "sebastian/lines-of-code", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "e02bf626f404b5daec382a7b8a6a4456e49017e5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/e02bf626f404b5daec382a7b8a6a4456e49017e5", + "reference": "e02bf626f404b5daec382a7b8a6a4456e49017e5", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.6", + "php": "^7.3 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for counting the lines of code in PHP source code", + "homepage": "https://github.com/sebastianbergmann/lines-of-code", + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-07-22T18:33:42+00:00" }, { "name": "sebastian/object-enumerator", - "version": "3.0.3", + "version": "4.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5" + "reference": "074fed2d0a6d08e1677dd8ce9d32aecb384917b8" }, "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/074fed2d0a6d08e1677dd8ce9d32aecb384917b8", + "reference": "074fed2d0a6d08e1677dd8ce9d32aecb384917b8", "shasum": "" }, "require": { - "php": "^7.0", - "sebastian/object-reflector": "^1.1.1", - "sebastian/recursion-context": "^3.0" + "php": "^7.3 || ^8.0", + "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": { @@ -6240,32 +6683,38 @@ ], "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" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-26T12:11:32+00:00" }, { "name": "sebastian/object-reflector", - "version": "1.1.1", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "773f97c67f28de00d397be301821b06708fca0be" + "reference": "127a46f6b057441b201253526f81d5406d6c7840" }, "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/127a46f6b057441b201253526f81d5406d6c7840", + "reference": "127a46f6b057441b201253526f81d5406d6c7840", "shasum": "" }, "require": { - "php": "^7.0" + "php": "^7.3 || ^8.0" }, "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": { @@ -6285,32 +6734,38 @@ ], "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" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-26T12:12:55+00:00" }, { "name": "sebastian/recursion-context", - "version": "3.0.0", + "version": "4.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8" + "reference": "062231bf61d2b9448c4fa5a7643b5e1829c11d63" }, "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/062231bf61d2b9448c4fa5a7643b5e1829c11d63", + "reference": "062231bf61d2b9448c4fa5a7643b5e1829c11d63", "shasum": "" }, "require": { - "php": "^7.0" + "php": "^7.3 || ^8.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": { @@ -6323,14 +6778,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" @@ -6338,29 +6793,38 @@ ], "description": "Provides functionality to recursively process PHP variables", "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "time": "2017-03-03T06:23:57+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-26T12:14:17+00:00" }, { "name": "sebastian/resource-operations", - "version": "2.0.1", + "version": "3.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9" + "reference": "0653718a5a629b065e91f774595267f8dc32e213" }, "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/0653718a5a629b065e91f774595267f8dc32e213", + "reference": "0653718a5a629b065e91f774595267f8dc32e213", "shasum": "" }, "require": { - "php": "^7.1" + "php": "^7.3 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -6380,32 +6844,38 @@ ], "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" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-26T12:16:22+00:00" }, { "name": "sebastian/type", - "version": "1.1.3", + "version": "2.2.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "3aaaa15fa71d27650d62a948be022fe3b48541a3" + "reference": "86991e2b33446cd96e648c18bcdb1e95afb2c05a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/3aaaa15fa71d27650d62a948be022fe3b48541a3", - "reference": "3aaaa15fa71d27650d62a948be022fe3b48541a3", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/86991e2b33446cd96e648c18bcdb1e95afb2c05a", + "reference": "86991e2b33446cd96e648c18bcdb1e95afb2c05a", "shasum": "" }, "require": { - "php": "^7.2" + "php": "^7.3 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^8.2" + "phpunit/phpunit": "^9.2" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1-dev" + "dev-master": "2.2-dev" } }, "autoload": { @@ -6426,29 +6896,35 @@ ], "description": "Collection of value objects that represent the types of the PHP type system", "homepage": "https://github.com/sebastianbergmann/type", - "time": "2019-07-02T08:10:15+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-07-05T08:31:53+00:00" }, { "name": "sebastian/version", - "version": "2.0.1", + "version": "3.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/version.git", - "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" + "reference": "626586115d0ed31cb71483be55beb759b5af5a3c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", - "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/626586115d0ed31cb71483be55beb759b5af5a3c", + "reference": "626586115d0ed31cb71483be55beb759b5af5a3c", "shasum": "" }, "require": { - "php": ">=5.6" + "php": "^7.3 || ^8.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -6469,7 +6945,13 @@ ], "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" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-26T12:18:43+00:00" }, { "name": "theseer/tokenizer",