diff --git a/.env.example b/.env.example index 7dc7ab957..c21b25a57 100644 --- a/.env.example +++ b/.env.example @@ -1,16 +1,18 @@ -APP_NAME=NOJ #App Name -APP_DISPLAY_NAME="NJUPT Online Judge" #Display Name -APP_ENV=local #Current Environment Name -APP_KEY=base64:6KvSj1hj/VJCNXnHECU16OVbcHk7h20O5TbsyOz5WuA= #App Key -APP_DEBUG=true #Debug Mode -APP_URL=http://ojsystem.com +APP_NAME=NOJ # App Name +APP_DISPLAY_NAME="NJUPT Online Judge" # Display Name +APP_ENV=local # Current Environment Name +APP_KEY=base64:6KvSj1hj/VJCNXnHECU16OVbcHk7h20O5TbsyOz5WuA= # App Key +APP_DEBUG=true # Debug Mode +APP_URL=http://ojsystem.com # APP URL APP_MULTI_DOMAIN=true # Multi Domain Mode, Automatic match APP_URL, note that you still need to set APP_URL for console command proper running -APP_LOCALE=en +APP_LOCALE=en # APP Locale, use zh-CN for simplified chinese APP_BACKUP=false #Enable Scheduling Backup -APP_LOGO="" #URL for site logo +APP_LOGO="/favicon.png" # URL for site logo +APP_NAVICON="/static/img/icon/icon-white.png" # URL for site nav logo +APP_FAVICON="/favicon.png" # URL for site favicon, must be png APP_DESC= APP_THEME="default" # choose from https://njuptaaa.github.io/docs/#/noj/guide/theme -APP_DEFAULT_EDITOR_THEME="material-design-darker" # Set to "vs-dark" uf you want classic appearance +APP_DEFAULT_EDITOR_THEME="material-design-darker" # Set to "vs-dark" if you want classic appearance APP_ALLOW_OAUTH_TEMP_ACCOUNT=false ADMIN_HTTPS=false diff --git a/CHANGELOG.md b/CHANGELOG.md index 251c229a7..55fc85b67 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,35 @@ All notable changes to this project will be documented in this file. +## NOJ 0.17.1 Characinae Build Pack 1 - 2021-10-12 +This is a build version update for `0.17.0 Characinae`. + +**Important:** Rerun scheduling for update site rank or run `php artisan scheduling:updateSiteRank` after this upgrade. + +### Update Logs +* **Compatibility:** The update site rank scheduling is now set at 1 am everyday. +* **New:** Add custom favicon, logo, and navicon support per #737 requests. +* **New:** Add `LikeScope` trait support. +* **New:** Add dynamic rank feature, see #649. +* **New:** Add a series of artisan commands with prefix `scheduling`, see #743. +* **Deprecated:** NOJ no longer uses old `RankModel` and `SiteMapModel`. +* **Fixed:** A bug causing Admin Portal ajax pagination returns only the first 15 records, see #738. +* **Fixed:** A bug causing Admin Portal ajax pagination memory overflows on a large amount of data and queries slowly, see #739. +* **Fixed:** A bug causing PDF generator cannot locate dejaVu font. +* **Fixed:** A Symphony 5 compatibility bug causing anti-cheat malfunction, see #740. +* **Fixed:** A Symphony 5 compatibility bug causing PDF generation malfunction, see #741. +* **Fixed:** A `laravel-admin-ext/scheduling` bug causing Admin Portal schedule running returns 419 on Windows platform, see laravel-admin-extensions/scheduling#20. +* **Fixed:** Typo (only 1 this time). +* **Improved:** Optimized site rank calculation performance, see #649. +* **Improved:** Optimized sitemap performance to process a tremendous amount of data, see #742 +* **Improved:** Use artisan commands for the scheduling system, see #743. +* **Improved:** Use dot-separated router for problem and status index. +* **Security:** `doctrine/dbal` is now at `2.13.4`. +* **Security:** `facade/ignition` is now at `2.15.0`. +* **Security:** `laravel-admin-ext/log-viewer` is now at `1.0.4`. +* **Security:** `laravel-admin-ext/scheduling` is now at `1.2`. +* **Security:** `ramsey/collection` is now at `1.2.2`. + ## v0.17.0 Characinae - 2021-10-09 This is a minor version update. As mentioned in `0.5.0` logs, the new version system would merge the old major and minor version numbers into new minor version numbers, thus as the 17th minor version update since NOJ `0.1.0`, this version would be numbered as major version `0`, minor version `17`, build pack `0` and patch number `0`. diff --git a/app/Admin/Controllers/ApiController.php b/app/Admin/Controllers/ApiController.php index abf8e83c2..4269736ea 100644 --- a/app/Admin/Controllers/ApiController.php +++ b/app/Admin/Controllers/ApiController.php @@ -10,11 +10,12 @@ class ApiController extends AdminController { - protected function paginate($items, $perPage = 15, $pageStart = 1) + protected function paginate($items, $perPage = 15) { - $offSet = ($pageStart * $perPage) - $perPage; + $currentPage = Paginator::resolveCurrentPage(); + $offSet = ($currentPage * $perPage) - $perPage; $itemsForCurrentPage = array_slice($items, $offSet, $perPage, true); - $paginator = new LengthAwarePaginator($itemsForCurrentPage, count($items), $perPage, Paginator::resolveCurrentPage(), ['path' => Paginator::resolveCurrentPath()]); + $paginator = new LengthAwarePaginator($itemsForCurrentPage, count($items), $perPage, $currentPage, ['path' => Paginator::resolveCurrentPath()]); return $paginator; } @@ -22,9 +23,7 @@ public function problems() { $q = request()->q; - return $this->paginate(Problem::orderBy('pcode', 'asc')->get()->filter(function ($problem) use ($q) { - return stripos($problem->readable_name, $q) !== false; - })->values()->transform(function ($problem) { + return $this->paginate(Problem::like('pcode', $q)->orLike('title', $q)->orderBy('pcode', 'asc')->get()->values()->transform(function ($problem) { return [ 'id' => $problem->pid, 'text' => $problem->readable_name, @@ -36,9 +35,7 @@ public function users() { $q = request()->q; - return $this->paginate(User::get()->filter(function ($user) use ($q) { - return stripos($user->readable_name, $q) !== false; - })->values()->transform(function ($user) { + return $this->paginate(User::like('name', $q)->orLike('email', $q)->orderBy('id', 'asc')->get()->values()->transform(function ($user) { return [ 'id' => $user->id, 'text' => $user->readable_name, diff --git a/app/Admin/bootstrap.php b/app/Admin/bootstrap.php index f8d9a30b5..dea69b83b 100644 --- a/app/Admin/bootstrap.php +++ b/app/Admin/bootstrap.php @@ -1,6 +1,6 @@ prependNamespace('admin', resource_path('views/admin')); diff --git a/app/Console/Commands/Scheduling/SyncContestProblem.php b/app/Console/Commands/Scheduling/SyncContestProblem.php new file mode 100644 index 000000000..a5bb5b4e8 --- /dev/null +++ b/app/Console/Commands/Scheduling/SyncContestProblem.php @@ -0,0 +1,67 @@ +line("[$time] Processing: Sync Remote Contest Problem"); + + $contestModel=new ContestModel(); + $syncList=$contestModel->runningContest(); + foreach ($syncList as $syncContest) { + if (isset($syncContest['crawled'])) { + if (!$syncContest['crawled']) { + $className="App\\Babel\\Extension\\hdu\\Synchronizer"; + $all_data=[ + 'oj'=>"hdu", + 'vcid'=>$syncContest['vcid'], + 'gid'=>$syncContest['gid'], + 'cid'=>$syncContest['cid'], + ]; + $hduSync=new $className($all_data); + $hduSync->scheduleCrawl(); + $contestModel->updateCrawlStatus($syncContest['cid']); + } + } + } + + $time=Carbon::now(); + $this->line("[$time] Processed: Successfully Synced Remote Contest Problem"); + } +} diff --git a/app/Console/Commands/Scheduling/SyncRankClarification.php b/app/Console/Commands/Scheduling/SyncRankClarification.php new file mode 100644 index 000000000..64567825d --- /dev/null +++ b/app/Console/Commands/Scheduling/SyncRankClarification.php @@ -0,0 +1,73 @@ +line("[$time] Processing: Sync Remote Contest Rank and Clarification"); + + $contestModel=new ContestModel(); + $syncList=$contestModel->runningContest(); + foreach ($syncList as $syncContest) { + if (!isset($syncContest['vcid'])) { + $contest=Contest::find($syncContest['cid']); + $contestRankRaw=$contest->rankRefresh(); + $cid=$syncContest['cid']; + Cache::tags(['contest', 'rank'])->put($cid, $contestRankRaw); + Cache::tags(['contest', 'rank'])->put("contestAdmin$cid", $contestRankRaw); + continue; + } + $className="App\\Babel\\Extension\\hdu\\Synchronizer"; // TODO Add OJ judgement. + $all_data=[ + 'oj'=>"hdu", + 'vcid'=>$syncContest['vcid'], + 'gid'=>$syncContest['gid'], + 'cid'=>$syncContest['cid'], + ]; + $hduSync=new $className($all_data); + $hduSync->crawlRank(); + $hduSync->crawlClarification(); + } + + $time=Carbon::now(); + $this->line("[$time] Processed: Successfully Synced Remote Contest Rank and Clarification"); + } +} diff --git a/app/Console/Commands/Scheduling/UpdateGroupElo.php b/app/Console/Commands/Scheduling/UpdateGroupElo.php new file mode 100644 index 000000000..3a094eb53 --- /dev/null +++ b/app/Console/Commands/Scheduling/UpdateGroupElo.php @@ -0,0 +1,69 @@ +line("[$time] Processing: Update Group Elo"); + + $groupModel=new GroupModel(); + $ret=$groupModel->refreshAllElo(); + foreach ($ret as $gid => $group) { + if (empty($group['result'])) { + Log::channel('group_elo')->info('Refreshed Group Elo (Empty) : ('.$gid.')'.$group['name']); + } else { + Log::channel('group_elo')->info('Refreshing Group Elo: ('.$gid.')'.$group['name']); + foreach ($group['result'] as $contest) { + if ($contest['ret']=='success') { + Log::channel('group_elo')->info(' Elo Clac Successfully : ('.$contest['cid'].')'.$contest['name']); + } else { + Log::channel('group_elo')->info(' Elo Clac Faild (Judge Not Over) : ('.$contest['cid'].')'.$contest['name'].' sids:'); + foreach ($contest['submissions'] as $sid) { + Log::channel('group_elo')->info(' '.$sid['sid']); + } + } + } + } + } + + $time=Carbon::now(); + $this->line("[$time] Processed: Successfully Updated Group Elo"); + } +} diff --git a/app/Console/Commands/Scheduling/UpdateJudgeServerStatus.php b/app/Console/Commands/Scheduling/UpdateJudgeServerStatus.php new file mode 100644 index 000000000..c3b3268d5 --- /dev/null +++ b/app/Console/Commands/Scheduling/UpdateJudgeServerStatus.php @@ -0,0 +1,64 @@ +line("[$time] Processing: Update JudgeServer Status"); + + $platformIDs=JudgeServer::column('oid'); + $babel=new Babel(); + foreach ($platformIDs as $platform) { + try { + $babel->monitor([ + "name" => OJ::findOrFail($platform)->ocode + ]); + } catch (Exception $e) { + Log::alert("Moniting OID $platform Failed.\n".$e->getMessage()); + } + } + + $time=Carbon::now(); + $this->line("[$time] Processed: Successfully Updated JudgeServer Status"); + } +} diff --git a/app/Console/Commands/Scheduling/UpdateRank.php b/app/Console/Commands/Scheduling/UpdateRank.php new file mode 100644 index 000000000..1fefe5ccd --- /dev/null +++ b/app/Console/Commands/Scheduling/UpdateRank.php @@ -0,0 +1,50 @@ +line("[$time] Processing: Update Site Rank"); + + SiteRank::rankList(); + + $time=Carbon::now(); + $this->line("[$time] Processed: Successfully Updated Site Rank"); + } +} diff --git a/app/Console/Commands/Scheduling/UpdateSiteMap.php b/app/Console/Commands/Scheduling/UpdateSiteMap.php new file mode 100644 index 000000000..5a118c153 --- /dev/null +++ b/app/Console/Commands/Scheduling/UpdateSiteMap.php @@ -0,0 +1,50 @@ +line("[$time] Processing: Update Site Map"); + + SiteMap::generate(); + + $time=Carbon::now(); + $this->line("[$time] Processed: Successfully Updated Site Map"); + } +} diff --git a/app/Console/Commands/Scheduling/UpdateTrendingGroups.php b/app/Console/Commands/Scheduling/UpdateTrendingGroups.php new file mode 100644 index 000000000..617d31c7f --- /dev/null +++ b/app/Console/Commands/Scheduling/UpdateTrendingGroups.php @@ -0,0 +1,51 @@ +line("[$time] Processing: Update Trending Groups"); + + $groupModel = new GroupModel(); + $groupModel->cacheTrendingGroups(); + + $time=Carbon::now(); + $this->line("[$time] Processed: Successfully Updated Trending Groups"); + } +} diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index 8692f8b29..10ab18383 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -3,17 +3,7 @@ namespace App\Console; use Illuminate\Console\Scheduling\Schedule; -use App\Babel\Babel; -use App\Models\Eloquent\JudgeServer; -use App\Models\RankModel; -use App\Models\SiteMapModel; -use App\Models\ContestModel; -use App\Models\Eloquent\Contest; -use App\Models\GroupModel; -use App\Models\OJModel; use Illuminate\Foundation\Console\Kernel as ConsoleKernel; -use Log; -use Cache; class Kernel extends ConsoleKernel { @@ -35,99 +25,19 @@ class Kernel extends ConsoleKernel protected function schedule(Schedule $schedule) { - $schedule->call(function() { - $rankModel=new RankModel(); - $rankModel->rankList(); - // file_put_contents(storage_path('app/task-schedule.output'),"Successfully Updated Rank"); - })->dailyAt('02:00')->description("Update Rank"); + $schedule->command('scheduling:updateSiteRank')->dailyAt('01:00')->description("Update Rank"); - $schedule->call(function() { - $siteMapModel=new SiteMapModel(); - // file_put_contents(storage_path('app/task-schedule.output'),"Successfully Updated SiteMap"); - })->dailyAt('02:00')->description("Update SiteMap"); + $schedule->command('scheduling:updateSiteMap')->dailyAt('02:00')->description("Update SiteMap"); - $schedule->call(function() { - $groupModel=new GroupModel(); - $groupModel->cacheTrendingGroups(); - // file_put_contents(storage_path('app/task-schedule.output'),"Successfully Cached Trending Groups"); - })->dailyAt('03:00')->description("Update Trending Groups"); + $schedule->command('scheduling:updateTrendingGroups')->dailyAt('03:00')->description("Update Trending Groups"); - $schedule->call(function() { - $groupModel=new GroupModel(); - $ret=$groupModel->refreshAllElo(); - foreach ($ret as $gid => $group) { - if (empty($group['result'])) { - Log::channel('group_elo')->info('Refreshed Group Elo (Empty) : ('.$gid.')'.$group['name']); - } else { - Log::channel('group_elo')->info('Refreshing Group Elo: ('.$gid.')'.$group['name']); - foreach ($group['result'] as $contest) { - if ($contest['ret']=='success') { - Log::channel('group_elo')->info(' Elo Clac Successfully : ('.$contest['cid'].')'.$contest['name']); - } else { - Log::channel('group_elo')->info(' Elo Clac Faild (Judge Not Over) : ('.$contest['cid'].')'.$contest['name'].' sids:'); - foreach ($contest['submissions'] as $sid) { - Log::channel('group_elo')->info(' '.$sid['sid']); - } - } - } - } - } - })->dailyAt('04:00')->description("Update Group Elo"); + $schedule->command('scheduling:updateGroupElo')->dailyAt('04:00')->description("Update Group Elo"); - $schedule->call(function() { - $contestModel=new ContestModel(); - $syncList=$contestModel->runningContest(); - foreach ($syncList as $syncContest) { - if (!isset($syncContest['vcid'])) { - $contest=Contest::find($syncContest['cid']); - $contestRankRaw=$contest->rankRefresh(); - $cid=$syncContest['cid']; - Cache::tags(['contest', 'rank'])->put($cid, $contestRankRaw); - Cache::tags(['contest', 'rank'])->put("contestAdmin$cid", $contestRankRaw); - continue; - } - $className="App\\Babel\\Extension\\hdu\\Synchronizer"; // TODO Add OJ judgement. - $all_data=[ - 'oj'=>"hdu", - 'vcid'=>$syncContest['vcid'], - 'gid'=>$syncContest['gid'], - 'cid'=>$syncContest['cid'], - ]; - $hduSync=new $className($all_data); - $hduSync->crawlRank(); - $hduSync->crawlClarification(); - } - // file_put_contents(storage_path('app/task-schedule.output'),"Successfully Synced Remote Rank and Clarification"); - })->everyMinute()->description("Sync Remote Rank and Clarification"); + $schedule->command('scheduling:syncRankClarification')->everyMinute()->description("Sync Remote Contest Rank and Clarification"); - $schedule->call(function() { - $contestModel=new ContestModel(); - $syncList=$contestModel->runningContest(); - foreach ($syncList as $syncContest) { - if (isset($syncContest['crawled'])) { - if (!$syncContest['crawled']) { - $className="App\\Babel\\Extension\\hdu\\Synchronizer"; - $all_data=[ - 'oj'=>"hdu", - 'vcid'=>$syncContest['vcid'], - 'gid'=>$syncContest['gid'], - 'cid'=>$syncContest['cid'], - ]; - $hduSync=new $className($all_data); - $hduSync->scheduleCrawl(); - $contestModel->updateCrawlStatus($syncContest['cid']); - } - } - } - })->everyMinute()->description("Sync Contest Problem"); + $schedule->command('scheduling:syncContestProblem')->everyMinute()->description("Sync Remote Contest Problem"); - $schedule->call(function() { - $oidList=JudgeServer::column('oid'); - $babel=new Babel(); - foreach ($oidList as $oid) { - $babel->monitor(["name"=>OJMOdel::ocode($oid)]); - } - })->everyMinute()->description("Update Judge Server Status"); + $schedule->command('scheduling:updateJudgeServerStatus')->everyMinute()->description("Update Judge Server Status"); if (!config("app.debug") && config("app.backup")) { $schedule->command('backup:run')->weekly()->description("BackUp Site"); diff --git a/app/Http/Controllers/MainController.php b/app/Http/Controllers/MainController.php index 879e9d1a2..c5359efbe 100644 --- a/app/Http/Controllers/MainController.php +++ b/app/Http/Controllers/MainController.php @@ -61,7 +61,7 @@ public function oldRedirect(Request $request) $id=isset($all_data["id"]) ? $all_data["id"] : null; if ($method=="showdetail" && !is_null($id)) { $problemModel=new ProblemModel(); - return ($problemModel->existPCode("NOJ$id")) ?Redirect::route('problem.detail', ['pcode' => "NOJ$id"]) : Redirect::route('problem_index'); + return ($problemModel->existPCode("NOJ$id")) ?Redirect::route('problem.detail', ['pcode' => "NOJ$id"]) : Redirect::route('problem.index'); } return Redirect::route('home'); } diff --git a/app/Http/Controllers/RankController.php b/app/Http/Controllers/RankController.php index 4de6c6034..0bf7d1cd1 100644 --- a/app/Http/Controllers/RankController.php +++ b/app/Http/Controllers/RankController.php @@ -1,7 +1,7 @@ list(100); + $rankingList=SiteRank::list(100); return view('rank.index', [ 'page_title'=>"Rank", 'site_title'=>config("app.name"), diff --git a/app/Jobs/AntiCheat.php b/app/Jobs/AntiCheat.php index 1877a7c61..96b176b4f 100644 --- a/app/Jobs/AntiCheat.php +++ b/app/Jobs/AntiCheat.php @@ -132,12 +132,7 @@ private function detectPlagiarism($config) $exe=base_path('binary'.DIRECTORY_SEPARATOR.'linux'.DIRECTORY_SEPARATOR.'sim_'.$lang); } - $exec=escapeshellarg($exe).' -p '; - - // wildcardly add all files - $exec.='*.'.$lang; - - $process=new Process($exec); + $process=new Process([$exe, '-p', "*.$lang"]); $process->setWorkingDirectory(Storage::path('contest'.DIRECTORY_SEPARATOR.'anticheat'.DIRECTORY_SEPARATOR.$cid.DIRECTORY_SEPARATOR.'raw'.DIRECTORY_SEPARATOR.$prob.DIRECTORY_SEPARATOR.$lang)); $process->run(); if (!$process->isSuccessful()) { diff --git a/app/Models/AccountModel.php b/app/Models/AccountModel.php index c134237a7..18562b36c 100644 --- a/app/Models/AccountModel.php +++ b/app/Models/AccountModel.php @@ -6,6 +6,7 @@ use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Hash; use App\Models\Eloquent\User; +use App\Models\Eloquent\Tool\SiteRank; use grubersjoe\BingPhoto; use Cache; use Exception; @@ -110,10 +111,10 @@ public function detail($uid) // Casual $ret["rank"]=Cache::tags(['rank', $ret["id"]])->get("rank", "N/A"); $ret["rankTitle"]=Cache::tags(['rank', $ret["id"]])->get("title", "Recruit"); - $ret["rankTitleColor"]=RankModel::getColor($ret["rankTitle"]); + $ret["rankTitleColor"]=SiteRank::getColor($ret["rankTitle"]); // Professional - $ret["professionalTitle"]=RankModel::getProfessionalTitle($ret["professional_rate"]); - $ret["professionalTitleColor"]=RankModel::getProfessionalColor($ret["professionalTitle"]); + $ret["professionalTitle"]=SiteRank::getProfessionalTitle($ret["professional_rate"]); + $ret["professionalTitleColor"]=SiteRank::getProfessionalColor($ret["professionalTitle"]); // Administration Group $ret["admin"]=User::find($uid)->hasPermission(1); try { diff --git a/app/Models/Eloquent/Contest.php b/app/Models/Eloquent/Contest.php index fcb10b39f..7c16b8986 100644 --- a/app/Models/Eloquent/Contest.php +++ b/app/Models/Eloquent/Contest.php @@ -7,12 +7,18 @@ use Illuminate\Support\Facades\DB; use App\Models\ContestModel as OutdatedContestModel; use Cache; +use DateTimeInterface; class Contest extends Model { protected $table='contest'; protected $primaryKey='cid'; + protected function serializeDate(DateTimeInterface $date) + { + return $date->format('Y-m-d H:i:s'); + } + public function getParsedRuleAttribute() { $rule=["Unknown", "ICPC", "IOI", "Custom ICPC", "Custom IOI", "HASAAOSE Compulter Exam"]; diff --git a/app/Models/Eloquent/Problem.php b/app/Models/Eloquent/Problem.php index c8b0771a0..a23e029d6 100644 --- a/app/Models/Eloquent/Problem.php +++ b/app/Models/Eloquent/Problem.php @@ -8,13 +8,22 @@ use Carbon; use DB; use Exception; +use App\Models\Traits\LikeScope; +use DateTimeInterface; class Problem extends Model { + use LikeScope; + protected $table = 'problem'; protected $primaryKey = 'pid'; const UPDATED_AT = "update_date"; + protected function serializeDate(DateTimeInterface $date) + { + return $date->format('Y-m-d H:i:s'); + } + public function getReadableNameAttribute() { return $this->pcode . '. ' . $this->title; @@ -76,6 +85,8 @@ public function getProblemStatus($userID = null, $contestID = null, Carbon $till private function getProblemStatusFromDB($userID, $contestID = null, Carbon $till = null) { + $endedAt = Carbon::now(); + if (filled($contestID)) { try { $endedAt = Carbon::parse(Contest::findOrFail($contestID)->endedAt); diff --git a/app/Models/Eloquent/Tool/SiteMap.php b/app/Models/Eloquent/Tool/SiteMap.php new file mode 100644 index 000000000..9d40026aa --- /dev/null +++ b/app/Models/Eloquent/Tool/SiteMap.php @@ -0,0 +1,49 @@ +add(route('home'), Carbon::now(), '1.0', 'daily'); + $sitemap->add(route('problem.index'), Carbon::now(), '1.0', 'daily'); + $sitemap->add(route("status.index"), Carbon::now(), '1.0', 'daily'); + $sitemap->add(route("contest.index"), Carbon::now(), '1.0', 'daily'); + $sitemap->add(route("group.index"), Carbon::now(), '1.0', 'daily'); + + Problem::chunk(200, function($problems) use ($sitemap) { + foreach ($problems as $problem) { + $sitemap->add(route('problem.detail', [ + 'pcode' => $problem->pcode + ]), Carbon::parse($problem->update_date), '0.8', 'monthly'); + } + }); + + Contest::where(["public" => 1, "audit_status" => 1])->chunk(200, function($contests) use ($sitemap) { + foreach ($contests as $contest) { + $sitemap->add(route('contest.detail', [ + 'cid' => $contest->cid + ]), Carbon::parse($contest->created_at), '0.8', 'monthly'); + } + }); + + Group::where(["public" => 1])->chunk(200, function($groups) use ($sitemap) { + foreach ($groups as $group) { + $sitemap->add(route('group.detail', [ + 'gcode' => $group->gcode + ]), Carbon::parse($group->created_at), '0.8', 'monthly'); + } + }); + + $sitemap->store('xml', 'sitemap'); + } +} diff --git a/app/Models/Eloquent/Tool/SiteRank.php b/app/Models/Eloquent/Tool/SiteRank.php new file mode 100644 index 000000000..b6705c3c6 --- /dev/null +++ b/app/Models/Eloquent/Tool/SiteRank.php @@ -0,0 +1,249 @@ + "cm-colorful-text", + "International Grandmaster" => "wemd-pink-text", + "Grandmaster" => "wemd-red-text", + "International Master" => "wemd-amber-text", + "Master" => "wemd-orange-text", + "Candidate Master" => "wemd-purple-text", + "Expert" => "wemd-blue-text", + "Specialist" => "wemd-cyan-text", + "Pupil" => "wemd-green-text", + "Newbie" => "wemd-gray-text", + ]; + + private static $professionalRankingPer = [ + "Legendary Grandmaster" => 3000, + "International Grandmaster" => 2600, + "Grandmaster" => 2400, + "International Master" => 2300, + "Master" => 2100, + "Candidate Master" => 1900, + "Expert" => 1600, + "Specialist" => 1400, + "Pupil" => 1200, + "Newbie" => 1, + ]; + + private static $casualRanking = [ + "Fleet Admiral" => "cm-colorful-text", + "Admiral" => "wemd-pink-text", + "Vice Admiral" => "wemd-red-text", + "Captain" => "wemd-deep-orange-text", + "Commander" => "wemd-orange-text", + "Lieutenant Commander" => "wemd-purple-text", + "Lieutenant" => "wemd-blue-text", + "Ensign" => "wemd-cyan-text", + "Apprentice" => "wemd-green-text", + "Recruit" => "wemd-gray-text", + ]; + + private static $casualRankingPer = [ + "Fleet Admiral" => 1, + "Admiral" => 5, + "Vice Admiral" => 10, + "Captain" => 10, + "Commander" => 50, + "Lieutenant Commander" => 100, + "Lieutenant" => 300, + "Ensign" => 700, + "Apprentice" => 1000, + "Recruit" => 400, + ]; + + public static function getColor($rankTitle) + { + if (is_null($rankTitle)) { + return ""; + } + return self::$casualRanking[$rankTitle]; + } + + public static function getProfessionalColor($rankTitle) + { + if (is_null($rankTitle)) { + return self::$professionalRanking["None"]; + } + return self::$professionalRanking[$rankTitle]; + } + + public static function list($num) + { + $rankList = Cache::tags(['rank'])->get('general'); + if ($rankList == null) { + $rankList = []; + } + $rankList = collect($rankList)->slice(0, $num); + $userIDArr = $rankList->pluck('uid'); + $userInfoRaw = User::whereIntegerInRaw('id', $userIDArr)->get(); + $userInfo = []; + foreach ($userInfoRaw as $u) { + $userInfo[$u->id] = $u; + } + return $rankList->map(function ($item) use ($userInfo) { + $item["details"] = isset($userInfo[$item["uid"]]) ? $userInfo[$item["uid"]] : []; + return $item; + }); + } + + private static function getRecords(Carbon $from = null) + { + $userAcceptedRecords = Submission::select("uid", DB::raw("count(distinct pid) as solved"))->where("verdict", "Accepted"); + $userCommunityRecords = ProblemSolution::select("uid", DB::raw("count(distinct pid) as community"))->where("audit", 1); + if(filled($from)){ + $userAcceptedRecords = $userAcceptedRecords->where("submission_date", ">", $from->timestamp); + $userCommunityRecords = $userCommunityRecords->where("created_at", ">", $from); + } + $userAcceptedRecords = collect($userAcceptedRecords->groupBy("uid")->get()->toArray()); + $userCommunityRecords = collect($userCommunityRecords->groupBy("uid")->get()->toArray()); + $totUserRecords = $userAcceptedRecords->pluck('uid')->merge($userCommunityRecords->pluck('uid'))->unique(); + $rankList = []; + foreach($totUserRecords as $uid) { + $rankList[$uid]['uid'] = $uid; + $rankList[$uid]['solved'] = 0; + $rankList[$uid]['community'] = 0; + $rankList[$uid]['tot'] = 0; + } + foreach($userAcceptedRecords as $userAcceptedRecord) { + $rankList[$userAcceptedRecord['uid']]['solved'] = $userAcceptedRecord['solved']; + } + foreach($userCommunityRecords as $userCommunityRecord) { + $rankList[$userCommunityRecord['uid']]['community'] = $userCommunityRecord['community']; + } + foreach($rankList as &$rankItem) { + $rankItem['tot'] = $rankItem['solved'] + $rankItem['community']; + } + unset($rankItem); + return $rankList; + } + + private static function parseCoefficient($rankList) + { + $activityCoefficient = self::getRecords(Carbon::parse('-1 months')); + $activityCoefficientDivider = collect($activityCoefficient)->max('tot'); + if(blank($activityCoefficientDivider)) { + $activityCoefficientDivider = 1; + } + foreach ($rankList as $uid => $rankItem) { + if(isset($activityCoefficient[$uid])){ + $activityTot = $activityCoefficient[$uid]['tot']; + } else { + $activityTot = 0; + } + $rankList[$uid]["activityCoefficient"] = ($activityTot / $activityCoefficientDivider) + 0.5; + $rankList[$uid]["points"] = $rankList[$uid]["tot"] * $rankList[$uid]["activityCoefficient"]; + } + usort($rankList, function($a, $b) { + return $b['points'] <=> $a['points']; + }); + return collect($rankList); + } + + public static function rankList() + { + Cache::tags(['rank'])->flush(); + $rankList = self::getRecords(); + $totUsers = count($rankList); + if ($totUsers > 0) { + // $rankList = DB::select("SELECT *,solvedCount+communityCount as totValue, 1 as activityCoefficient FROM (SELECT uid,sum(solvedCount) as solvedCount,sum(communityCount) as communityCount FROM ((SELECT uid,count(DISTINCT submission.pid) as solvedCount,0 as communityCount from submission where verdict=\"Accepted\" group by uid) UNION (SELECT uid,0 as solvedCount,count(DISTINCT pid) from problem_solution where audit=1 group by uid)) as temp GROUP BY uid) as temp2 ORDER BY solvedCount+communityCount DESC"); + $rankList = self::parseCoefficient($rankList); + $rankIter = 1; + $rankValue = 1; + $rankSolved = -1; + $rankListCached = []; + self::procRankingPer($totUsers); + foreach ($rankList as $rankItem) { + if ($rankSolved != $rankItem["points"]) { + $rankValue = $rankIter; + $rankSolved = $rankItem["points"]; + } + $rankTitle = self::getRankTitle($rankValue); + Cache::tags(['rank', $rankItem["uid"]])->put("rank", $rankValue, 86400); + Cache::tags(['rank', $rankItem["uid"]])->put("title", $rankTitle, 86400); + $rankListCached[] = [ + "uid" => $rankItem["uid"], + "rank" => $rankValue, + "title" => $rankTitle, + "titleColor" => self::getColor($rankTitle), + "solved" => $rankItem["solved"], + "community" => $rankItem["community"], + "activityCoefficient" => $rankItem["activityCoefficient"], + ]; + $rankIter++; + } + Cache::tags(['rank'])->put("general", $rankListCached, 86400); + } + } + + public static function getProfessionalRanking() + { + $professionalRankList = []; + $verifiedUsers = User::all(); + $rankIter = 0; + foreach ($verifiedUsers as $user) { + $rankVal = $user->professional_rate; + $rankTitle = self::getProfessionalTitle($rankVal); + $titleColor = self::getProfessionalColor($rankTitle); + $professionalRankList[$rankIter++] = [ + "name" => $user->name, + "uid" => $user->id, + "avatar" => $user->avatar, + "professionalRate" => $user->professional_rate, + "rankTitle" => $rankTitle, + "titleColor" => $titleColor + ]; + } + return $professionalRankList; + } + + private static function procRankingPer($totUsers) + { + if ($totUsers > 0) { + $tot = 0; + $cur = 0; + foreach (self::$casualRankingPer as $c) { + $tot += $c; + } + foreach (self::$casualRankingPer as &$c) { + $c = round($c * $totUsers / $tot); + $cur += $c; + $c = $cur; + } + $c = $totUsers; + unset($c); + } + } + + public static function getRankTitle($rankVal) + { + foreach (self::$casualRankingPer as $title => $c) { + if ($rankVal <= $c) { + return $title; + } + } + return Arr::last(self::$casualRankingPer); + } + + public static function getProfessionalTitle($rankVal) + { + foreach (self::$professionalRankingPer as $title => $point) { + if ($rankVal >= $point) { + return $title; + } + } + return Arr::last(self::$professionalRankingPer); + } +} diff --git a/app/Models/Eloquent/User.php b/app/Models/Eloquent/User.php index 8e0920772..28d742e7e 100644 --- a/app/Models/Eloquent/User.php +++ b/app/Models/Eloquent/User.php @@ -12,10 +12,12 @@ use DB; use Log; use Exception; +use App\Models\Traits\LikeScope; class User extends Authenticatable { use HasApiTokens, Notifiable; + use LikeScope; protected $table='users'; diff --git a/app/Models/RankModel.php b/app/Models/RankModel.php deleted file mode 100644 index 04bf1af66..000000000 --- a/app/Models/RankModel.php +++ /dev/null @@ -1,193 +0,0 @@ -"cm-colorful-text", - "International Grandmaster"=>"wemd-pink-text", - "Grandmaster"=>"wemd-red-text", - "International Master"=>"wemd-amber-text", - "Master"=>"wemd-orange-text", - "Candidate Master"=>"wemd-purple-text", - "Expert"=>"wemd-blue-text", - "Specialist"=>"wemd-cyan-text", - "Pupil"=>"wemd-green-text", - "Newbie"=>"wemd-gray-text", - ]; - - private static $professionalRankingPer=[ - "Legendary Grandmaster"=>3000, - "International Grandmaster"=>2600, - "Grandmaster"=>2400, - "International Master"=>2300, - "Master"=>2100, - "Candidate Master"=>1900, - "Expert"=>1600, - "Specialist"=>1400, - "Pupil"=>1200, - "Newbie"=>1, - ]; - - private static $casualRanking=[ - "Fleet Admiral"=>"cm-colorful-text", - "Admiral"=>"wemd-pink-text", - "Vice Admiral"=>"wemd-red-text", - "Captain"=>"wemd-deep-orange-text", - "Commander"=>"wemd-orange-text", - "Lieutenant Commander"=>"wemd-purple-text", - "Lieutenant"=>"wemd-blue-text", - "Ensign"=>"wemd-cyan-text", - "Apprentice"=>"wemd-green-text", - "Recruit"=>"wemd-gray-text", - ]; - - public $casualRankingPer=[ - "Fleet Admiral"=>1, - "Admiral"=>5, - "Vice Admiral"=>10, - "Captain"=>10, - "Commander"=>50, - "Lieutenant Commander"=>100, - "Lieutenant"=>300, - "Ensign"=>700, - "Apprentice"=>1000, - "Recruit"=>400, - ]; - - public static function getColor($rankTitle) - { - if (is_null($rankTitle)) { - return ""; - } - return self::$casualRanking[$rankTitle]; - } - - public static function getProfessionalColor($rankTitle) - { - if (is_null($rankTitle)) { - return self::$professionalRanking["None"]; - } - return self::$professionalRanking[$rankTitle]; - } - - public function list($num) - { - $rankList=Cache::tags(['rank'])->get('general'); - if ($rankList==null) { - $rankList=[]; - } - $rankList=array_slice($rankList, 0, $num); - $userInfoRaw=DB::table("users")->select("id as uid", "avatar", "name")->get()->all(); - $userInfo=[]; - foreach ($userInfoRaw as $u) { - $userInfo[$u["uid"]]=$u; - } - foreach ($rankList as &$r) { - $r["details"]=isset($userInfo[$r["uid"]]) ? $userInfo[$r["uid"]] : []; - } - // var_dump($rankList); exit(); - return $rankList; - } - - public function rankList() - { - Cache::tags(['rank'])->flush(); - $totUsers=DB::table("submission")->where(["verdict"=>"Accepted"])->select(DB::raw("count(distinct uid) as res"))->get()->first()["res"]; - if ($totUsers>0) { - $rankList=DB::select("SELECT *,solvedCount+communityCount as totValue FROM (SELECT uid,sum(solvedCount) as solvedCount,sum(communityCount) as communityCount FROM ((SELECT uid,count(DISTINCT submission.pid) as solvedCount,0 as communityCount from submission where verdict=\"Accepted\" group by uid) UNION (SELECT uid,0 as solvedCount,count(DISTINCT pid) from problem_solution where audit=1 group by uid)) as temp GROUP BY uid) as temp2 ORDER BY solvedCount+communityCount DESC"); - $rankIter=1; - $rankValue=1; - $rankSolved=-1; - $rankListCached=[]; - $this->procRankingPer(); - foreach ($rankList as $rankItem) { - if ($rankSolved!=$rankItem["totValue"]) { - $rankValue=$rankIter; - $rankSolved=$rankItem["totValue"]; - } - $rankTitle=$this->getRankTitle($rankValue); - Cache::tags(['rank', $rankItem["uid"]])->put("rank", $rankValue, 86400); - Cache::tags(['rank', $rankItem["uid"]])->put("title", $rankTitle, 86400); - $rankListCached[]=[ - "uid"=>$rankItem["uid"], - "rank"=>$rankValue, - "title"=>$rankTitle, - "titleColor"=>self::getColor($rankTitle), - "solved"=>$rankItem["solvedCount"], - "community"=>$rankItem["communityCount"] - ]; - $rankIter++; - } - Cache::tags(['rank'])->put("general", $rankListCached, 86400); - } - } - - public function getProfessionalRanking() - { - $professionalRankList=[]; - $verifiedUsers=DB::table("users")->select("professional_rate", "id as uid", "avatar", "name")->get()->all(); - $rankIter=0; - foreach ($verifiedUsers as $user) { - $rankVal=$user['professional_rate']; - $rankTitle=self::getProfessionalTitle($rankVal); - $titleColor=self::getProfessionalColor($rankTitle); - $professionalRankList[$rankIter++]=[ - "name"=>$user["name"], - "uid"=>$user["uid"], - "avatar"=>$user["avatar"], - "professionalRate"=>$user["professional_rate"], - "rankTitle"=>$rankTitle, - "titleColor"=>$titleColor - ]; - } - return $professionalRankList; - } - - private function procRankingPer() - { - $totUsers=DB::table("submission")->where(["verdict"=>"Accepted"])->select(DB::raw("count(distinct uid) as res"))->get()->first()["res"]; - if ($totUsers>0) { - $tot=0; - $cur=0; - foreach ($this->casualRankingPer as $c) { - $tot+=$c; - } - foreach ($this->casualRankingPer as &$c) { - $c=round($c * $totUsers / $tot); - $cur+=$c; - $c=$cur; - } - $c=$totUsers; - unset($c); - } - } - - public function getRankTitle($rankVal) - { - foreach ($this->casualRankingPer as $title=>$c) { - if ($rankVal<=$c) { - return $title; - } - } - return Arr::last($this->casualRankingPer); - } - - public static function getProfessionalTitle($rankVal) - { - foreach (self::$professionalRankingPer as $title=>$point) { - if ($rankVal>=$point) { - return $title; - } - } - return Arr::last(self::$professionalRankingPer); - } -} diff --git a/app/Models/SiteMapModel.php b/app/Models/SiteMapModel.php deleted file mode 100644 index a9dfafd57..000000000 --- a/app/Models/SiteMapModel.php +++ /dev/null @@ -1,39 +0,0 @@ -add(URL::to(""), date("Y-m-d H:i:s"), '1.0', 'daily'); - $sitemap->add(URL::to("problem"), date("Y-m-d H:i:s"), '1.0', 'daily'); - $sitemap->add(URL::to("status"), date("Y-m-d H:i:s"), '1.0', 'daily'); - $sitemap->add(URL::to("contest"), date("Y-m-d H:i:s"), '1.0', 'daily'); - $sitemap->add(URL::to("group"), date("Y-m-d H:i:s"), '1.0', 'daily'); - - $problems=DB::table('problem')->get()->all(); - foreach ($problems as $p) { - $sitemap->add(URL::to("problem/{$p['pcode']}"), $p['update_date'], '0.8', 'monthly'); - } - - $contests=DB::table('contest')->where(["public"=>1, "audit_status"=>1])->get()->all(); - foreach ($contests as $c) { - $sitemap->add(URL::to("contest/{$c['cid']}"), $c['created_at'], '0.8', 'monthly'); - } - - $groups=DB::table('group')->where(["public"=>1])->get()->all(); - foreach ($groups as $g) { - $sitemap->add(URL::to("group/{$g['gcode']}"), $g['created_at'], '0.8', 'monthly'); - } - - $sitemap->store('xml', 'sitemap'); - } -} diff --git a/app/Models/Traits/LikeScope.php b/app/Models/Traits/LikeScope.php new file mode 100644 index 000000000..ced75c563 --- /dev/null +++ b/app/Models/Traits/LikeScope.php @@ -0,0 +1,66 @@ +where($column, $operator, $value) : $query->orWhere($column, $operator, $value); + } + + public function scopeOrLike($query, $column, $value, $side='both', $isNotLike=false) + { + return $query->like($column, $value, $side, $isNotLike, false); + } + + public function scopeNotLike($query, $column, $value, $side='both', $isAnd=true) + { + return $query->like($column, $value, $side, true, $isAnd); + } + + public function scopeOrNotLike($query, $column, $value, $side='both') + { + return $query->like($column, $value, $side, true, false); + } +} diff --git a/composer.lock b/composer.lock index 5357b318f..8dd187e34 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": "5f4f6605951d86465040cd4d460eac68", + "content-hash": "428abd2aa67ff9ae4769c83dcc0f47d7", "packages": [ { "name": "asundust/auth-captcha", @@ -513,16 +513,16 @@ }, { "name": "doctrine/dbal", - "version": "2.13.2", + "version": "2.13.4", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "8dd39d2ead4409ce652fd4f02621060f009ea5e4" + "reference": "2411a55a2a628e6d8dd598388ab13474802c7b6e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/8dd39d2ead4409ce652fd4f02621060f009ea5e4", - "reference": "8dd39d2ead4409ce652fd4f02621060f009ea5e4", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/2411a55a2a628e6d8dd598388ab13474802c7b6e", + "reference": "2411a55a2a628e6d8dd598388ab13474802c7b6e", "shasum": "" }, "require": { @@ -534,13 +534,14 @@ }, "require-dev": { "doctrine/coding-standard": "9.0.0", - "jetbrains/phpstorm-stubs": "2020.2", - "phpstan/phpstan": "0.12.81", - "phpunit/phpunit": "^7.5.20|^8.5|9.5.5", + "jetbrains/phpstorm-stubs": "2021.1", + "phpstan/phpstan": "0.12.99", + "phpunit/phpunit": "^7.5.20|^8.5|9.5.10", + "psalm/plugin-phpunit": "0.16.1", "squizlabs/php_codesniffer": "3.6.0", "symfony/cache": "^4.4", "symfony/console": "^2.0.5|^3.0|^4.0|^5.0", - "vimeo/psalm": "4.6.4" + "vimeo/psalm": "4.10.0" }, "suggest": { "symfony/console": "For helpful console commands such as SQL execution and import of files." @@ -601,7 +602,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/2.13.2" + "source": "https://github.com/doctrine/dbal/tree/2.13.4" }, "funding": [ { @@ -617,7 +618,7 @@ "type": "tidelift" } ], - "time": "2021-06-18T21:48:39+00:00" + "time": "2021-10-02T15:59:26+00:00" }, { "name": "doctrine/deprecations", @@ -2693,16 +2694,16 @@ }, { "name": "laravel-admin-ext/log-viewer", - "version": "v1.0.3", + "version": "v1.0.4", "source": { "type": "git", "url": "https://github.com/laravel-admin-extensions/log-viewer.git", - "reference": "742a2550746c9346d463249ba16b8fba9ac9cf97" + "reference": "4852ea06345a82594afd9810fbbe7e32ba5d4ab3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel-admin-extensions/log-viewer/zipball/742a2550746c9346d463249ba16b8fba9ac9cf97", - "reference": "742a2550746c9346d463249ba16b8fba9ac9cf97", + "url": "https://api.github.com/repos/laravel-admin-extensions/log-viewer/zipball/4852ea06345a82594afd9810fbbe7e32ba5d4ab3", + "reference": "4852ea06345a82594afd9810fbbe7e32ba5d4ab3", "shasum": "" }, "require": { @@ -2744,9 +2745,9 @@ ], "support": { "issues": "https://github.com/laravel-admin-extensions/log-viewer/issues", - "source": "https://github.com/laravel-admin-extensions/log-viewer/tree/master" + "source": "https://github.com/laravel-admin-extensions/log-viewer/tree/v1.0.4" }, - "time": "2018-11-13T17:17:36+00:00" + "time": "2021-10-11T09:34:30+00:00" }, { "name": "laravel-admin-ext/media-manager", @@ -2866,17 +2867,23 @@ }, { "name": "laravel-admin-ext/scheduling", - "version": "v1.1", + "version": "v1.2", "source": { "type": "git", "url": "https://github.com/laravel-admin-extensions/scheduling.git", - "reference": "72bd03a2917a7d479b019ccc64e991c7d5bec7bb" + "reference": "84483c6fc99a554ba0dd1f32d5db86a027952f4d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel-admin-extensions/scheduling/zipball/72bd03a2917a7d479b019ccc64e991c7d5bec7bb", - "reference": "72bd03a2917a7d479b019ccc64e991c7d5bec7bb", - "shasum": "" + "url": "https://api.github.com/repos/laravel-admin-extensions/scheduling/zipball/84483c6fc99a554ba0dd1f32d5db86a027952f4d", + "reference": "84483c6fc99a554ba0dd1f32d5db86a027952f4d", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require": { "encore/laravel-admin": "~1.5", @@ -2918,9 +2925,9 @@ ], "support": { "issues": "https://github.com/laravel-admin-extensions/scheduling/issues", - "source": "https://github.com/laravel-admin-extensions/scheduling/tree/v1.1" + "source": "https://github.com/laravel-admin-extensions/scheduling/tree/v1.2" }, - "time": "2019-12-11T02:46:10+00:00" + "time": "2021-10-11T09:17:09+00:00" }, { "name": "laravel/framework", @@ -6642,16 +6649,16 @@ }, { "name": "ramsey/collection", - "version": "1.2.1", + "version": "1.2.2", "source": { "type": "git", "url": "https://github.com/ramsey/collection.git", - "reference": "eaca1dc1054ddd10cbd83c1461907bee6fb528fa" + "reference": "cccc74ee5e328031b15640b51056ee8d3bb66c0a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/collection/zipball/eaca1dc1054ddd10cbd83c1461907bee6fb528fa", - "reference": "eaca1dc1054ddd10cbd83c1461907bee6fb528fa", + "url": "https://api.github.com/repos/ramsey/collection/zipball/cccc74ee5e328031b15640b51056ee8d3bb66c0a", + "reference": "cccc74ee5e328031b15640b51056ee8d3bb66c0a", "shasum": "" }, "require": { @@ -6705,7 +6712,7 @@ ], "support": { "issues": "https://github.com/ramsey/collection/issues", - "source": "https://github.com/ramsey/collection/tree/1.2.1" + "source": "https://github.com/ramsey/collection/tree/1.2.2" }, "funding": [ { @@ -6717,7 +6724,7 @@ "type": "tidelift" } ], - "time": "2021-08-06T03:41:06+00:00" + "time": "2021-10-10T03:01:02+00:00" }, { "name": "ramsey/uuid", @@ -10977,19 +10984,20 @@ }, { "name": "facade/ignition", - "version": "2.14.1", + "version": "2.15.0", "source": { "type": "git", "url": "https://github.com/facade/ignition.git", - "reference": "6d89c4c99537f487ad29f646d57ebf107ef714ed" + "reference": "3ee6e94815462bcf09bca0efc1c9069685df8da3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/facade/ignition/zipball/6d89c4c99537f487ad29f646d57ebf107ef714ed", - "reference": "6d89c4c99537f487ad29f646d57ebf107ef714ed", + "url": "https://api.github.com/repos/facade/ignition/zipball/3ee6e94815462bcf09bca0efc1c9069685df8da3", + "reference": "3ee6e94815462bcf09bca0efc1c9069685df8da3", "shasum": "" }, "require": { + "ext-curl": "*", "ext-json": "*", "ext-mbstring": "*", "facade/flare-client-php": "^1.9.1", @@ -11049,7 +11057,7 @@ "issues": "https://github.com/facade/ignition/issues", "source": "https://github.com/facade/ignition" }, - "time": "2021-10-08T12:34:52+00:00" + "time": "2021-10-11T15:24:06+00:00" }, { "name": "facade/ignition-contracts", diff --git a/config/app.php b/config/app.php index 331cc3690..d0529fa75 100644 --- a/config/app.php +++ b/config/app.php @@ -62,7 +62,9 @@ | */ - 'logo' => env('APP_LOGO', "/static/img/icon/icon-white.png"), + 'logo' => env('APP_LOGO', "/favicon.png"), + 'navicon' => env('APP_NAVICON', "/static/img/icon/icon-white.png"), + 'favicon' => env('APP_FAVICON', "/favicon.png"), 'desc' => env('APP_DESC', ''), /* diff --git a/config/snappy.php b/config/snappy.php index cba51469c..56dd2fbf9 100644 --- a/config/snappy.php +++ b/config/snappy.php @@ -36,7 +36,7 @@ 'pdf' => [ 'enabled' => true, 'binary' => '"'.env('WKHTML_PDF_BINARY', '/usr/local/bin/wkhtmltopdf').'"', - 'timeout' => false, + 'timeout' => null, 'options' => [ 'enable-local-file-access' => true, 'encoding' => 'UTF-8' @@ -47,7 +47,7 @@ 'image' => [ 'enabled' => true, 'binary' => '"'.env('WKHTML_IMG_BINARY', '/usr/local/bin/wkhtmltoimage').'"', - 'timeout' => false, + 'timeout' => null, 'options' => [ 'enable-local-file-access' => true, 'encoding' => 'UTF-8' diff --git a/config/version.php b/config/version.php index a95a775b4..51f73b73e 100644 --- a/config/version.php +++ b/config/version.php @@ -14,7 +14,7 @@ 'number' => [ 'major' => 0, 'minor' => 17, - 'build' => 0, + 'build' => 1, ], /* @@ -37,7 +37,7 @@ | */ - 'build' => null, + 'build' => 'Build Pack 1', /* |-------------------------------------------------------------------------- diff --git a/package-lock.json b/package-lock.json index 27e07cd25..d6919b0f9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -126,12 +126,12 @@ }, "dependencies": { "@babel/generator": { - "version": "7.15.4", - "resolved": "https://registry.nlark.com/@babel/generator/download/@babel/generator-7.15.4.tgz?cache=0&sync_timestamp=1630624314560&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fgenerator%2Fdownload%2F%40babel%2Fgenerator-7.15.4.tgz", - "integrity": "sha1-hayxWaJnymMk+Xk5hpke4gIqBbA=", + "version": "7.15.8", + "resolved": "https://registry.npmmirror.com/@babel/generator/download/@babel/generator-7.15.8.tgz?cache=0&sync_timestamp=1633562180752&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40babel%2Fgenerator%2Fdownload%2F%40babel%2Fgenerator-7.15.8.tgz", + "integrity": "sha1-+la+a1lpUs6yMQSM+E7kmaGcDNE=", "dev": true, "requires": { - "@babel/types": "^7.15.4", + "@babel/types": "^7.15.6", "jsesc": "^2.5.1", "source-map": "^0.5.0" } @@ -205,9 +205,9 @@ } }, "@babel/parser": { - "version": "7.15.6", - "resolved": "https://registry.nlark.com/@babel/parser/download/@babel/parser-7.15.6.tgz", - "integrity": "sha1-BDuao8MDwHIuU3f++Rl/TPF5ZUk=", + "version": "7.15.8", + "resolved": "https://registry.npmmirror.com/@babel/parser/download/@babel/parser-7.15.8.tgz?cache=0&sync_timestamp=1633562181007&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40babel%2Fparser%2Fdownload%2F%40babel%2Fparser-7.15.8.tgz", + "integrity": "sha1-e6zcvnG9w/+TbVEMFdzqfPC5kBY=", "dev": true }, "@babel/template": { @@ -462,12 +462,12 @@ }, "dependencies": { "@babel/generator": { - "version": "7.15.4", - "resolved": "https://registry.nlark.com/@babel/generator/download/@babel/generator-7.15.4.tgz?cache=0&sync_timestamp=1630624314560&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fgenerator%2Fdownload%2F%40babel%2Fgenerator-7.15.4.tgz", - "integrity": "sha1-hayxWaJnymMk+Xk5hpke4gIqBbA=", + "version": "7.15.8", + "resolved": "https://registry.npmmirror.com/@babel/generator/download/@babel/generator-7.15.8.tgz?cache=0&sync_timestamp=1633562180752&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40babel%2Fgenerator%2Fdownload%2F%40babel%2Fgenerator-7.15.8.tgz", + "integrity": "sha1-+la+a1lpUs6yMQSM+E7kmaGcDNE=", "dev": true, "requires": { - "@babel/types": "^7.15.4", + "@babel/types": "^7.15.6", "jsesc": "^2.5.1", "source-map": "^0.5.0" } @@ -511,9 +511,9 @@ } }, "@babel/parser": { - "version": "7.15.6", - "resolved": "https://registry.nlark.com/@babel/parser/download/@babel/parser-7.15.6.tgz", - "integrity": "sha1-BDuao8MDwHIuU3f++Rl/TPF5ZUk=", + "version": "7.15.8", + "resolved": "https://registry.npmmirror.com/@babel/parser/download/@babel/parser-7.15.8.tgz?cache=0&sync_timestamp=1633562181007&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40babel%2Fparser%2Fdownload%2F%40babel%2Fparser-7.15.8.tgz", + "integrity": "sha1-e6zcvnG9w/+TbVEMFdzqfPC5kBY=", "dev": true }, "@babel/template": { @@ -593,9 +593,9 @@ } }, "@babel/plugin-proposal-async-generator-functions": { - "version": "7.15.4", - "resolved": "https://registry.nlark.com/@babel/plugin-proposal-async-generator-functions/download/@babel/plugin-proposal-async-generator-functions-7.15.4.tgz", - "integrity": "sha1-+Cqr6WwTXSzqqRf+ufX8oxY1J34=", + "version": "7.15.8", + "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-async-generator-functions/download/@babel/plugin-proposal-async-generator-functions-7.15.8.tgz", + "integrity": "sha1-oxAPeF+rQ1eYfEIjqxsCtZkEhAM=", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5", @@ -944,12 +944,12 @@ }, "dependencies": { "@babel/generator": { - "version": "7.15.4", - "resolved": "https://registry.nlark.com/@babel/generator/download/@babel/generator-7.15.4.tgz?cache=0&sync_timestamp=1630624314560&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fgenerator%2Fdownload%2F%40babel%2Fgenerator-7.15.4.tgz", - "integrity": "sha1-hayxWaJnymMk+Xk5hpke4gIqBbA=", + "version": "7.15.8", + "resolved": "https://registry.npmmirror.com/@babel/generator/download/@babel/generator-7.15.8.tgz?cache=0&sync_timestamp=1633562180752&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40babel%2Fgenerator%2Fdownload%2F%40babel%2Fgenerator-7.15.8.tgz", + "integrity": "sha1-+la+a1lpUs6yMQSM+E7kmaGcDNE=", "dev": true, "requires": { - "@babel/types": "^7.15.4", + "@babel/types": "^7.15.6", "jsesc": "^2.5.1", "source-map": "^0.5.0" } @@ -1023,9 +1023,9 @@ } }, "@babel/parser": { - "version": "7.15.6", - "resolved": "https://registry.nlark.com/@babel/parser/download/@babel/parser-7.15.6.tgz", - "integrity": "sha1-BDuao8MDwHIuU3f++Rl/TPF5ZUk=", + "version": "7.15.8", + "resolved": "https://registry.npmmirror.com/@babel/parser/download/@babel/parser-7.15.8.tgz?cache=0&sync_timestamp=1633562181007&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40babel%2Fparser%2Fdownload%2F%40babel%2Fparser-7.15.8.tgz", + "integrity": "sha1-e6zcvnG9w/+TbVEMFdzqfPC5kBY=", "dev": true }, "@babel/template": { @@ -1176,12 +1176,12 @@ }, "dependencies": { "@babel/generator": { - "version": "7.15.4", - "resolved": "https://registry.nlark.com/@babel/generator/download/@babel/generator-7.15.4.tgz?cache=0&sync_timestamp=1630624314560&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fgenerator%2Fdownload%2F%40babel%2Fgenerator-7.15.4.tgz", - "integrity": "sha1-hayxWaJnymMk+Xk5hpke4gIqBbA=", + "version": "7.15.8", + "resolved": "https://registry.npmmirror.com/@babel/generator/download/@babel/generator-7.15.8.tgz?cache=0&sync_timestamp=1633562180752&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40babel%2Fgenerator%2Fdownload%2F%40babel%2Fgenerator-7.15.8.tgz", + "integrity": "sha1-+la+a1lpUs6yMQSM+E7kmaGcDNE=", "dev": true, "requires": { - "@babel/types": "^7.15.4", + "@babel/types": "^7.15.6", "jsesc": "^2.5.1", "source-map": "^0.5.0" } @@ -1234,19 +1234,19 @@ } }, "@babel/helper-module-transforms": { - "version": "7.15.4", - "resolved": "https://registry.nlark.com/@babel/helper-module-transforms/download/@babel/helper-module-transforms-7.15.4.tgz", - "integrity": "sha1-lizGKaf3+aCC3WLQMH+nX+h4jXw=", + "version": "7.15.8", + "resolved": "https://registry.npmmirror.com/@babel/helper-module-transforms/download/@babel/helper-module-transforms-7.15.8.tgz", + "integrity": "sha1-2MDnWoelLjdKjyX4VRdHhqCUmLI=", "dev": true, "requires": { "@babel/helper-module-imports": "^7.15.4", "@babel/helper-replace-supers": "^7.15.4", "@babel/helper-simple-access": "^7.15.4", "@babel/helper-split-export-declaration": "^7.15.4", - "@babel/helper-validator-identifier": "^7.14.9", + "@babel/helper-validator-identifier": "^7.15.7", "@babel/template": "^7.15.4", "@babel/traverse": "^7.15.4", - "@babel/types": "^7.15.4" + "@babel/types": "^7.15.6" } }, "@babel/helper-optimise-call-expression": { @@ -1288,10 +1288,16 @@ "@babel/types": "^7.15.4" } }, + "@babel/helper-validator-identifier": { + "version": "7.15.7", + "resolved": "https://registry.nlark.com/@babel/helper-validator-identifier/download/@babel/helper-validator-identifier-7.15.7.tgz", + "integrity": "sha1-Ig35k7/pBKSmsCq08zhaXr9uI4k=", + "dev": true + }, "@babel/parser": { - "version": "7.15.6", - "resolved": "https://registry.nlark.com/@babel/parser/download/@babel/parser-7.15.6.tgz", - "integrity": "sha1-BDuao8MDwHIuU3f++Rl/TPF5ZUk=", + "version": "7.15.8", + "resolved": "https://registry.npmmirror.com/@babel/parser/download/@babel/parser-7.15.8.tgz?cache=0&sync_timestamp=1633562181007&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40babel%2Fparser%2Fdownload%2F%40babel%2Fparser-7.15.8.tgz", + "integrity": "sha1-e6zcvnG9w/+TbVEMFdzqfPC5kBY=", "dev": true }, "@babel/template": { @@ -1348,12 +1354,12 @@ }, "dependencies": { "@babel/generator": { - "version": "7.15.4", - "resolved": "https://registry.nlark.com/@babel/generator/download/@babel/generator-7.15.4.tgz?cache=0&sync_timestamp=1630624314560&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fgenerator%2Fdownload%2F%40babel%2Fgenerator-7.15.4.tgz", - "integrity": "sha1-hayxWaJnymMk+Xk5hpke4gIqBbA=", + "version": "7.15.8", + "resolved": "https://registry.npmmirror.com/@babel/generator/download/@babel/generator-7.15.8.tgz?cache=0&sync_timestamp=1633562180752&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40babel%2Fgenerator%2Fdownload%2F%40babel%2Fgenerator-7.15.8.tgz", + "integrity": "sha1-+la+a1lpUs6yMQSM+E7kmaGcDNE=", "dev": true, "requires": { - "@babel/types": "^7.15.4", + "@babel/types": "^7.15.6", "jsesc": "^2.5.1", "source-map": "^0.5.0" } @@ -1406,19 +1412,27 @@ } }, "@babel/helper-module-transforms": { - "version": "7.15.4", - "resolved": "https://registry.nlark.com/@babel/helper-module-transforms/download/@babel/helper-module-transforms-7.15.4.tgz", - "integrity": "sha1-lizGKaf3+aCC3WLQMH+nX+h4jXw=", + "version": "7.15.8", + "resolved": "https://registry.npmmirror.com/@babel/helper-module-transforms/download/@babel/helper-module-transforms-7.15.8.tgz", + "integrity": "sha1-2MDnWoelLjdKjyX4VRdHhqCUmLI=", "dev": true, "requires": { "@babel/helper-module-imports": "^7.15.4", "@babel/helper-replace-supers": "^7.15.4", "@babel/helper-simple-access": "^7.15.4", "@babel/helper-split-export-declaration": "^7.15.4", - "@babel/helper-validator-identifier": "^7.14.9", + "@babel/helper-validator-identifier": "^7.15.7", "@babel/template": "^7.15.4", "@babel/traverse": "^7.15.4", - "@babel/types": "^7.15.4" + "@babel/types": "^7.15.6" + }, + "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.15.7", + "resolved": "https://registry.nlark.com/@babel/helper-validator-identifier/download/@babel/helper-validator-identifier-7.15.7.tgz", + "integrity": "sha1-Ig35k7/pBKSmsCq08zhaXr9uI4k=", + "dev": true + } } }, "@babel/helper-optimise-call-expression": { @@ -1461,9 +1475,9 @@ } }, "@babel/parser": { - "version": "7.15.6", - "resolved": "https://registry.nlark.com/@babel/parser/download/@babel/parser-7.15.6.tgz", - "integrity": "sha1-BDuao8MDwHIuU3f++Rl/TPF5ZUk=", + "version": "7.15.8", + "resolved": "https://registry.npmmirror.com/@babel/parser/download/@babel/parser-7.15.8.tgz?cache=0&sync_timestamp=1633562181007&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40babel%2Fparser%2Fdownload%2F%40babel%2Fparser-7.15.8.tgz", + "integrity": "sha1-e6zcvnG9w/+TbVEMFdzqfPC5kBY=", "dev": true }, "@babel/template": { @@ -1581,17 +1595,38 @@ } }, "@babel/plugin-transform-runtime": { - "version": "7.15.0", - "resolved": "https://registry.nlark.com/@babel/plugin-transform-runtime/download/@babel/plugin-transform-runtime-7.15.0.tgz", - "integrity": "sha1-06plDRFnjKds4pQHH9pT14BBg7M=", + "version": "7.15.8", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-runtime/download/@babel/plugin-transform-runtime-7.15.8.tgz", + "integrity": "sha1-nRWx6U4cf2NE9lqNVzWX2Txs2IY=", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-module-imports": "^7.15.4", "@babel/helper-plugin-utils": "^7.14.5", "babel-plugin-polyfill-corejs2": "^0.2.2", - "babel-plugin-polyfill-corejs3": "^0.2.2", + "babel-plugin-polyfill-corejs3": "^0.2.5", "babel-plugin-polyfill-regenerator": "^0.2.2", "semver": "^6.3.0" + }, + "dependencies": { + "@babel/helper-module-imports": { + "version": "7.15.4", + "resolved": "https://registry.nlark.com/@babel/helper-module-imports/download/@babel/helper-module-imports-7.15.4.tgz", + "integrity": "sha1-4YAH0jBjLeoZtHhTuYRHbntOED8=", + "dev": true, + "requires": { + "@babel/types": "^7.15.4" + } + }, + "@babel/types": { + "version": "7.15.6", + "resolved": "https://registry.nlark.com/@babel/types/download/@babel/types-7.15.6.tgz", + "integrity": "sha1-mavcSCGLKIHAWN0KerBbmcm+dY8=", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.9", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/plugin-transform-shorthand-properties": { @@ -1604,13 +1639,13 @@ } }, "@babel/plugin-transform-spread": { - "version": "7.14.6", - "resolved": "https://registry.nlark.com/@babel/plugin-transform-spread/download/@babel/plugin-transform-spread-7.14.6.tgz", - "integrity": "sha1-a9QOV/596UqpBIUZY7VhZlL3MUQ=", + "version": "7.15.8", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-spread/download/@babel/plugin-transform-spread-7.15.8.tgz", + "integrity": "sha1-edWqJ/aNcARJstoHaR36MtL21Gg=", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5" + "@babel/helper-skip-transparent-expression-wrappers": "^7.15.4" } }, "@babel/plugin-transform-sticky-regex": { @@ -1660,9 +1695,9 @@ } }, "@babel/preset-env": { - "version": "7.15.6", - "resolved": "https://registry.nlark.com/@babel/preset-env/download/@babel/preset-env-7.15.6.tgz?cache=0&sync_timestamp=1631228878496&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fpreset-env%2Fdownload%2F%40babel%2Fpreset-env-7.15.6.tgz", - "integrity": "sha1-DziY251j0yDyGxc4DYRid53ldlk=", + "version": "7.15.8", + "resolved": "https://registry.npmmirror.com/@babel/preset-env/download/@babel/preset-env-7.15.8.tgz", + "integrity": "sha1-9SfOW8sSHNGZ9rUCvyPkILP/jbo=", "dev": true, "requires": { "@babel/compat-data": "^7.15.0", @@ -1670,7 +1705,7 @@ "@babel/helper-plugin-utils": "^7.14.5", "@babel/helper-validator-option": "^7.14.5", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.15.4", - "@babel/plugin-proposal-async-generator-functions": "^7.15.4", + "@babel/plugin-proposal-async-generator-functions": "^7.15.8", "@babel/plugin-proposal-class-properties": "^7.14.5", "@babel/plugin-proposal-class-static-block": "^7.15.4", "@babel/plugin-proposal-dynamic-import": "^7.14.5", @@ -1725,7 +1760,7 @@ "@babel/plugin-transform-regenerator": "^7.14.5", "@babel/plugin-transform-reserved-words": "^7.14.5", "@babel/plugin-transform-shorthand-properties": "^7.14.5", - "@babel/plugin-transform-spread": "^7.14.6", + "@babel/plugin-transform-spread": "^7.15.8", "@babel/plugin-transform-sticky-regex": "^7.14.5", "@babel/plugin-transform-template-literals": "^7.14.5", "@babel/plugin-transform-typeof-symbol": "^7.14.5", @@ -1734,7 +1769,7 @@ "@babel/preset-modules": "^0.1.4", "@babel/types": "^7.15.6", "babel-plugin-polyfill-corejs2": "^0.2.2", - "babel-plugin-polyfill-corejs3": "^0.2.2", + "babel-plugin-polyfill-corejs3": "^0.2.5", "babel-plugin-polyfill-regenerator": "^0.2.2", "core-js-compat": "^3.16.0", "semver": "^6.3.0" @@ -1822,9 +1857,9 @@ } }, "@discoveryjs/json-ext": { - "version": "0.5.3", - "resolved": "https://registry.nlark.com/@discoveryjs/json-ext/download/@discoveryjs/json-ext-0.5.3.tgz", - "integrity": "sha1-kEIPn5xtOYfxdqGafY52QnGi9V0=", + "version": "0.5.5", + "resolved": "https://registry.nlark.com/@discoveryjs/json-ext/download/@discoveryjs/json-ext-0.5.5.tgz", + "integrity": "sha1-koPJzlsomjxPYcEnV0aeWTd/gfM=", "dev": true }, "@nodelib/fs.scandir": { @@ -1854,9 +1889,9 @@ } }, "@trysound/sax": { - "version": "0.1.1", - "resolved": "https://registry.nlark.com/@trysound/sax/download/@trysound/sax-0.1.1.tgz", - "integrity": "sha1-M0hWQEjnotc5jJNdRmwEFOu2pmk=", + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/@trysound/sax/download/@trysound/sax-0.2.0.tgz", + "integrity": "sha1-zMqrdYr1Z2Hre/N69vA/Mm3XmK0=", "dev": true }, "@types/babel__core": { @@ -1902,7 +1937,7 @@ }, "@types/clean-css": { "version": "4.2.5", - "resolved": "https://registry.nlark.com/@types/clean-css/download/@types/clean-css-4.2.5.tgz", + "resolved": "https://registry.npmmirror.com/@types/clean-css/download/@types/clean-css-4.2.5.tgz", "integrity": "sha1-ac5izBNVfJDKQEYBM/Zy3FLOr4k=", "dev": true, "requires": { @@ -1919,9 +1954,9 @@ } }, "@types/eslint": { - "version": "7.28.0", - "resolved": "https://registry.nlark.com/@types/eslint/download/@types/eslint-7.28.0.tgz", - "integrity": "sha1-fkHySB0wHGjhT0g/4QsBd1POjVo=", + "version": "7.28.1", + "resolved": "https://registry.npmmirror.com/@types/eslint/download/@types/eslint-7.28.1.tgz", + "integrity": "sha1-ULB3R/H4TCuozTlM8P4LoHr84yA=", "dev": true, "requires": { "@types/estree": "*", @@ -1964,9 +1999,9 @@ } }, "@types/imagemin": { - "version": "7.0.1", - "resolved": "https://registry.nlark.com/@types/imagemin/download/@types/imagemin-7.0.1.tgz", - "integrity": "sha1-EcoeZcyzhxqEadmyMDO5XTg47aA=", + "version": "8.0.0", + "resolved": "https://registry.npmmirror.com/@types/imagemin/download/@types/imagemin-8.0.0.tgz", + "integrity": "sha1-v1u+H+/zsRLH4N4G0CRxKtJh4DM=", "dev": true, "requires": { "@types/node": "*" @@ -1974,7 +2009,7 @@ }, "@types/imagemin-gifsicle": { "version": "7.0.1", - "resolved": "https://registry.nlark.com/@types/imagemin-gifsicle/download/@types/imagemin-gifsicle-7.0.1.tgz", + "resolved": "https://registry.npmmirror.com/@types/imagemin-gifsicle/download/@types/imagemin-gifsicle-7.0.1.tgz", "integrity": "sha1-CESpajOEOLuY93spis8hcmDQ1Ak=", "dev": true, "requires": { @@ -1983,7 +2018,7 @@ }, "@types/imagemin-mozjpeg": { "version": "8.0.1", - "resolved": "https://registry.nlark.com/@types/imagemin-mozjpeg/download/@types/imagemin-mozjpeg-8.0.1.tgz", + "resolved": "https://registry.npmmirror.com/@types/imagemin-mozjpeg/download/@types/imagemin-mozjpeg-8.0.1.tgz", "integrity": "sha1-6vLweuo6MXoXEO8sdj7FPzvPzcU=", "dev": true, "requires": { @@ -1992,7 +2027,7 @@ }, "@types/imagemin-optipng": { "version": "5.2.1", - "resolved": "https://registry.nlark.com/@types/imagemin-optipng/download/@types/imagemin-optipng-5.2.1.tgz", + "resolved": "https://registry.npmmirror.com/@types/imagemin-optipng/download/@types/imagemin-optipng-5.2.1.tgz", "integrity": "sha1-bvAz87FdKBAJ3k4L0srfbL0udBo=", "dev": true, "requires": { @@ -2001,7 +2036,7 @@ }, "@types/imagemin-svgo": { "version": "8.0.1", - "resolved": "https://registry.nlark.com/@types/imagemin-svgo/download/@types/imagemin-svgo-8.0.1.tgz", + "resolved": "https://registry.npmmirror.com/@types/imagemin-svgo/download/@types/imagemin-svgo-8.0.1.tgz", "integrity": "sha1-A69om3Xb3rY0wkV7oiBDUwoA2H4=", "dev": true, "requires": { @@ -2022,9 +2057,9 @@ "dev": true }, "@types/node": { - "version": "16.9.1", - "resolved": "https://registry.nlark.com/@types/node/download/@types/node-16.9.1.tgz", - "integrity": "sha1-BhGzfbQkbJN/7vUp3cwBjPjjVwg=", + "version": "16.10.3", + "resolved": "https://registry.npmmirror.com/@types/node/download/@types/node-16.10.3.tgz?cache=0&sync_timestamp=1633466062179&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-16.10.3.tgz", + "integrity": "sha1-eo8oOGA+oxTR0iuzFx2JnhXFe9U=", "dev": true }, "@types/parse-json": { @@ -2041,7 +2076,7 @@ }, "@types/svgo": { "version": "1.3.6", - "resolved": "https://registry.nlark.com/@types/svgo/download/@types/svgo-1.3.6.tgz", + "resolved": "https://registry.npmmirror.com/@types/svgo/download/@types/svgo-1.3.6.tgz", "integrity": "sha1-nbAKfd+bJq0v62uDS+8YGGd4ReE=", "dev": true }, @@ -2192,24 +2227,24 @@ } }, "@webpack-cli/configtest": { - "version": "1.0.4", - "resolved": "https://registry.nlark.com/@webpack-cli/configtest/download/@webpack-cli/configtest-1.0.4.tgz", - "integrity": "sha1-8DzmMRwIg6g9BFaeLAPGI4MW0qo=", + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/@webpack-cli/configtest/download/@webpack-cli/configtest-1.1.0.tgz", + "integrity": "sha1-g0K+8Lrft9/TtXbyV0q4DHJb4EM=", "dev": true }, "@webpack-cli/info": { - "version": "1.3.0", - "resolved": "https://registry.nlark.com/@webpack-cli/info/download/@webpack-cli/info-1.3.0.tgz", - "integrity": "sha1-nXijEQGpYJl6Ss1B/9m5MAYn/is=", + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/@webpack-cli/info/download/@webpack-cli/info-1.4.0.tgz", + "integrity": "sha1-uRecMierCcu7FJqnM0dfz5lDAiM=", "dev": true, "requires": { "envinfo": "^7.7.3" } }, "@webpack-cli/serve": { - "version": "1.5.2", - "resolved": "https://registry.nlark.com/@webpack-cli/serve/download/@webpack-cli/serve-1.5.2.tgz", - "integrity": "sha1-6lhLY3/2PFpHf28hYEtaIFtyyew=", + "version": "1.6.0", + "resolved": "https://registry.npmmirror.com/@webpack-cli/serve/download/@webpack-cli/serve-1.6.0.tgz", + "integrity": "sha1-LCdaoFyJXszrv8NM+yI8bovVkaI=", "dev": true }, "@xtuc/ieee754": { @@ -2241,9 +2276,9 @@ "dev": true }, "acorn-import-assertions": { - "version": "1.7.6", - "resolved": "https://registry.nlark.com/acorn-import-assertions/download/acorn-import-assertions-1.7.6.tgz", - "integrity": "sha1-WA4//K5ncO6+7HbDuXIyAenQH3g=", + "version": "1.8.0", + "resolved": "https://registry.npmmirror.com/acorn-import-assertions/download/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha1-uitZOc5iwjjbbZPYHJsRGym4Vek=", "dev": true }, "adjust-sourcemap-loader": { @@ -2437,17 +2472,50 @@ "dev": true }, "autoprefixer": { - "version": "10.3.4", - "resolved": "https://registry.nlark.com/autoprefixer/download/autoprefixer-10.3.4.tgz?cache=0&sync_timestamp=1630624111662&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fautoprefixer%2Fdownload%2Fautoprefixer-10.3.4.tgz", - "integrity": "sha1-Ke/l0Z9RwoGVMXjdtbhMXxyiTIY=", + "version": "10.3.7", + "resolved": "https://registry.npmmirror.com/autoprefixer/download/autoprefixer-10.3.7.tgz", + "integrity": "sha1-zvJWIFhAa9N4yUqs2ja7Rql7MYY=", "dev": true, "requires": { - "browserslist": "^4.16.8", - "caniuse-lite": "^1.0.30001252", - "colorette": "^1.3.0", + "browserslist": "^4.17.3", + "caniuse-lite": "^1.0.30001264", "fraction.js": "^4.1.1", "normalize-range": "^0.1.2", + "picocolors": "^0.2.1", "postcss-value-parser": "^4.1.0" + }, + "dependencies": { + "browserslist": { + "version": "4.17.3", + "resolved": "https://registry.npmmirror.com/browserslist/download/browserslist-4.17.3.tgz", + "integrity": "sha1-KETNbuvhTRI4SwEi0hdVAWDS1iQ=", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001264", + "electron-to-chromium": "^1.3.857", + "escalade": "^3.1.1", + "node-releases": "^1.1.77", + "picocolors": "^0.2.1" + } + }, + "caniuse-lite": { + "version": "1.0.30001265", + "resolved": "https://registry.npmmirror.com/caniuse-lite/download/caniuse-lite-1.0.30001265.tgz?cache=0&sync_timestamp=1633496930216&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fcaniuse-lite%2Fdownload%2Fcaniuse-lite-1.0.30001265.tgz", + "integrity": "sha1-BhPJ5ski5CJ5Lm/O/fmjr+7k+MM=", + "dev": true + }, + "electron-to-chromium": { + "version": "1.3.864", + "resolved": "https://registry.npmmirror.com/electron-to-chromium/download/electron-to-chromium-1.3.864.tgz", + "integrity": "sha1-apk7zBlqK4s9+E0o1dTdkSOTiF8=", + "dev": true + }, + "node-releases": { + "version": "1.1.77", + "resolved": "https://registry.npmmirror.com/node-releases/download/node-releases-1.1.77.tgz", + "integrity": "sha1-ULDP7ehV3TdOdYW/Io/zTlfBwy4=", + "dev": true + } } }, "axios": { @@ -2492,13 +2560,13 @@ } }, "babel-plugin-polyfill-corejs3": { - "version": "0.2.4", - "resolved": "https://registry.nlark.com/babel-plugin-polyfill-corejs3/download/babel-plugin-polyfill-corejs3-0.2.4.tgz", - "integrity": "sha1-aMuBMWsOjZ1yGpLgAJ7G7NTNLKk=", + "version": "0.2.5", + "resolved": "https://registry.npmmirror.com/babel-plugin-polyfill-corejs3/download/babel-plugin-polyfill-corejs3-0.2.5.tgz", + "integrity": "sha1-J3mEahahZSJEriaLHpBq2hB/r5I=", "dev": true, "requires": { "@babel/helper-define-polyfill-provider": "^0.2.2", - "core-js-compat": "^3.14.0" + "core-js-compat": "^3.16.2" } }, "babel-plugin-polyfill-regenerator": { @@ -2585,7 +2653,7 @@ }, "ms": { "version": "2.0.0", - "resolved": "https://registry.nlark.com/ms/download/ms-2.0.0.tgz", + "resolved": "https://registry.npmmirror.com/ms/download/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true } @@ -2847,7 +2915,7 @@ }, "charenc": { "version": "0.0.2", - "resolved": "https://registry.npm.taobao.org/charenc/download/charenc-0.0.2.tgz", + "resolved": "https://registry.npmmirror.com/charenc/download/charenc-0.0.2.tgz", "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=", "dev": true }, @@ -2916,9 +2984,9 @@ } }, "clean-css": { - "version": "5.1.5", - "resolved": "https://registry.nlark.com/clean-css/download/clean-css-5.1.5.tgz", - "integrity": "sha1-OwryQNz8mjd5oIwjMt8+vUR08jI=", + "version": "5.2.1", + "resolved": "https://registry.npmmirror.com/clean-css/download/clean-css-5.2.1.tgz", + "integrity": "sha1-5b2xvuXzMsZ+mMthgSUdT4jApqs=", "dev": true, "requires": { "source-map": "~0.6.0" @@ -3003,9 +3071,9 @@ } }, "collect.js": { - "version": "4.28.6", - "resolved": "https://registry.nlark.com/collect.js/download/collect.js-4.28.6.tgz", - "integrity": "sha1-f7da6TuBmPe7iEYeJj6gl0TQxWs=", + "version": "4.29.0", + "resolved": "https://registry.npmmirror.com/collect.js/download/collect.js-4.29.0.tgz", + "integrity": "sha1-L+zFNbXlcSpcfuqiwtUQ8xE+xCM=", "dev": true }, "color-convert": { @@ -3029,9 +3097,9 @@ "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=" }, "colord": { - "version": "2.7.0", - "resolved": "https://registry.nlark.com/colord/download/colord-2.7.0.tgz", - "integrity": "sha1-cG6jb+DNZRtYXrFC/mS2SAGFJw4=", + "version": "2.8.0", + "resolved": "https://registry.npmmirror.com/colord/download/colord-2.8.0.tgz", + "integrity": "sha1-ZPt6oD3nZStaOe7lAnGhBMJ4OxI=", "dev": true }, "colorette": { @@ -3102,7 +3170,7 @@ }, "ms": { "version": "2.0.0", - "resolved": "https://registry.nlark.com/ms/download/ms-2.0.0.tgz", + "resolved": "https://registry.npmmirror.com/ms/download/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true } @@ -3110,7 +3178,7 @@ }, "concat": { "version": "1.0.3", - "resolved": "https://registry.nlark.com/concat/download/concat-1.0.3.tgz", + "resolved": "https://registry.npmmirror.com/concat/download/concat-1.0.3.tgz", "integrity": "sha1-QPM1MInWVGdpXLGIa0Xt1jfYzKg=", "dev": true, "requires": { @@ -3191,38 +3259,44 @@ "dev": true }, "core-js-compat": { - "version": "3.17.3", - "resolved": "https://registry.nlark.com/core-js-compat/download/core-js-compat-3.17.3.tgz", - "integrity": "sha1-s5yOTexx7NxzXGU85SM0ZuVhMk4=", + "version": "3.18.2", + "resolved": "https://registry.npmmirror.com/core-js-compat/download/core-js-compat-3.18.2.tgz", + "integrity": "sha1-5Awmb71hOUjdjS0hVjRdqKwDwUI=", "dev": true, "requires": { - "browserslist": "^4.17.0", + "browserslist": "^4.17.3", "semver": "7.0.0" }, "dependencies": { "browserslist": { - "version": "4.17.0", - "resolved": "https://registry.nlark.com/browserslist/download/browserslist-4.17.0.tgz", - "integrity": "sha1-H82B7HW0HW1JlPsIMbkqwYwBZJw=", + "version": "4.17.3", + "resolved": "https://registry.npmmirror.com/browserslist/download/browserslist-4.17.3.tgz", + "integrity": "sha1-KETNbuvhTRI4SwEi0hdVAWDS1iQ=", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001254", - "colorette": "^1.3.0", - "electron-to-chromium": "^1.3.830", + "caniuse-lite": "^1.0.30001264", + "electron-to-chromium": "^1.3.857", "escalade": "^3.1.1", - "node-releases": "^1.1.75" + "node-releases": "^1.1.77", + "picocolors": "^0.2.1" } }, "caniuse-lite": { - "version": "1.0.30001255", - "resolved": "https://registry.nlark.com/caniuse-lite/download/caniuse-lite-1.0.30001255.tgz", - "integrity": "sha1-87CbWatS4551GlaVI2GPR8QpjKA=", + "version": "1.0.30001265", + "resolved": "https://registry.npmmirror.com/caniuse-lite/download/caniuse-lite-1.0.30001265.tgz?cache=0&sync_timestamp=1633496930216&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fcaniuse-lite%2Fdownload%2Fcaniuse-lite-1.0.30001265.tgz", + "integrity": "sha1-BhPJ5ski5CJ5Lm/O/fmjr+7k+MM=", "dev": true }, "electron-to-chromium": { - "version": "1.3.835", - "resolved": "https://registry.nlark.com/electron-to-chromium/download/electron-to-chromium-1.3.835.tgz", - "integrity": "sha1-mPpEAqt7xq++SVOoyptjyzpr8Is=", + "version": "1.3.864", + "resolved": "https://registry.npmmirror.com/electron-to-chromium/download/electron-to-chromium-1.3.864.tgz", + "integrity": "sha1-apk7zBlqK4s9+E0o1dTdkSOTiF8=", + "dev": true + }, + "node-releases": { + "version": "1.1.77", + "resolved": "https://registry.npmmirror.com/node-releases/download/node-releases-1.1.77.tgz", + "integrity": "sha1-ULDP7ehV3TdOdYW/Io/zTlfBwy4=", "dev": true }, "semver": { @@ -3379,7 +3453,7 @@ }, "css-loader": { "version": "5.2.7", - "resolved": "https://registry.nlark.com/css-loader/download/css-loader-5.2.7.tgz", + "resolved": "https://registry.npmmirror.com/css-loader/download/css-loader-5.2.7.tgz", "integrity": "sha1-m58RHt9vsr5dxiUlZEy8nCMgZK4=", "dev": true, "requires": { @@ -3469,9 +3543,9 @@ } }, "css-what": { - "version": "5.0.1", - "resolved": "https://registry.nlark.com/css-what/download/css-what-5.0.1.tgz", - "integrity": "sha1-PvqCATH0ZpqKwkCPnDLnx96fTK0=", + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/css-what/download/css-what-5.1.0.tgz", + "integrity": "sha1-P3tweq32M7r2LCzrhXm1RbtA9/4=", "dev": true }, "cssesc": { @@ -3651,7 +3725,7 @@ }, "depd": { "version": "1.1.2", - "resolved": "https://registry.npm.taobao.org/depd/download/depd-1.1.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdepd%2Fdownload%2Fdepd-1.1.2.tgz", + "resolved": "https://registry.npm.taobao.org/depd/download/depd-1.1.2.tgz", "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", "dev": true }, @@ -3836,7 +3910,7 @@ }, "emoji-regex": { "version": "8.0.0", - "resolved": "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-8.0.0.tgz", + "resolved": "https://registry.npmmirror.com/emoji-regex/download/emoji-regex-8.0.0.tgz", "integrity": "sha1-6Bj9ac5cz8tARZT4QpY79TFkzDc=", "dev": true }, @@ -3905,9 +3979,9 @@ } }, "es-module-lexer": { - "version": "0.7.1", - "resolved": "https://registry.nlark.com/es-module-lexer/download/es-module-lexer-0.7.1.tgz", - "integrity": "sha1-wsjg9G8t8GJ0za8N0/OzPgoLJn0=", + "version": "0.9.3", + "resolved": "https://registry.npmmirror.com/es-module-lexer/download/es-module-lexer-0.9.3.tgz", + "integrity": "sha1-bxPbAMw4QXE32vdDZvU1yOtDjxk=", "dev": true }, "es5-ext": { @@ -4097,7 +4171,7 @@ }, "ms": { "version": "2.0.0", - "resolved": "https://registry.nlark.com/ms/download/ms-2.0.0.tgz", + "resolved": "https://registry.npmmirror.com/ms/download/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true } @@ -4152,9 +4226,9 @@ "dev": true }, "fastq": { - "version": "1.12.0", - "resolved": "https://registry.nlark.com/fastq/download/fastq-1.12.0.tgz", - "integrity": "sha1-7XtqtdYjk/ssxZHIU2UqXDGL95Q=", + "version": "1.13.0", + "resolved": "https://registry.nlark.com/fastq/download/fastq-1.13.0.tgz", + "integrity": "sha1-YWdg+Ip1Jr38WWt8q4wYk4w2uYw=", "dev": true, "requires": { "reusify": "^1.0.4" @@ -4262,7 +4336,7 @@ }, "ms": { "version": "2.0.0", - "resolved": "https://registry.nlark.com/ms/download/ms-2.0.0.tgz", + "resolved": "https://registry.npmmirror.com/ms/download/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true } @@ -4281,7 +4355,7 @@ }, "find-up": { "version": "4.1.0", - "resolved": "https://registry.nlark.com/find-up/download/find-up-4.1.0.tgz", + "resolved": "https://registry.npmmirror.com/find-up/download/find-up-4.1.0.tgz", "integrity": "sha1-l6/n1s3AvFkoWEt8jXsW6KmqXRk=", "dev": true, "requires": { @@ -4378,9 +4452,9 @@ "dev": true }, "glob": { - "version": "7.1.7", - "resolved": "https://registry.nlark.com/glob/download/glob-7.1.7.tgz?cache=0&sync_timestamp=1620337593934&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fglob%2Fdownload%2Fglob-7.1.7.tgz", - "integrity": "sha1-Oxk+kjPwHULQs/eClLvutBj5SpA=", + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/glob/download/glob-7.2.0.tgz", + "integrity": "sha1-0VU1r3cy4C6Uj0xBYovZECk/YCM=", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -4630,7 +4704,7 @@ "dependencies": { "clean-css": { "version": "4.2.3", - "resolved": "https://registry.nlark.com/clean-css/download/clean-css-4.2.3.tgz", + "resolved": "https://registry.npmmirror.com/clean-css/download/clean-css-4.2.3.tgz", "integrity": "sha1-UHtd59l7SO5T2ErbAWD/YhY4D3g=", "dev": true, "requires": { @@ -4651,7 +4725,7 @@ }, "terser": { "version": "4.8.0", - "resolved": "https://registry.nlark.com/terser/download/terser-4.8.0.tgz", + "resolved": "https://registry.nlark.com/terser/download/terser-4.8.0.tgz?cache=0&sync_timestamp=1632248737539&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fterser%2Fdownload%2Fterser-4.8.0.tgz", "integrity": "sha1-YwVjQ9fHC7KfOvZlhlpG/gOg3xc=", "dev": true, "requires": { @@ -4816,7 +4890,7 @@ }, "img-loader": { "version": "4.0.0", - "resolved": "https://registry.nlark.com/img-loader/download/img-loader-4.0.0.tgz", + "resolved": "https://registry.npmmirror.com/img-loader/download/img-loader-4.0.0.tgz", "integrity": "sha1-9B+wc3zI4daowkL0jCmkQ2QOBjg=", "dev": true, "requires": { @@ -4860,9 +4934,9 @@ } }, "import-local": { - "version": "3.0.2", - "resolved": "https://registry.npm.taobao.org/import-local/download/import-local-3.0.2.tgz", - "integrity": "sha1-qM/QQx0d5KIZlwPQA+PmI2T6bbY=", + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/import-local/download/import-local-3.0.3.tgz", + "integrity": "sha1-TVHCxJXKk5PaJZ7Ga2LgIpICEeA=", "dev": true, "requires": { "pkg-dir": "^4.2.0", @@ -4973,9 +5047,9 @@ "dev": true }, "is-core-module": { - "version": "2.6.0", - "resolved": "https://registry.nlark.com/is-core-module/download/is-core-module-2.6.0.tgz", - "integrity": "sha1-11U7JSb+Wbkro+QMjfdX7Ipwnhk=", + "version": "2.7.0", + "resolved": "https://registry.npmmirror.com/is-core-module/download/is-core-module-2.7.0.tgz", + "integrity": "sha1-PA730xtKz8V0+AxYQJ1WioNoSOM=", "dev": true, "requires": { "has": "^1.0.3" @@ -5109,9 +5183,9 @@ "dev": true }, "jest-worker": { - "version": "27.1.1", - "resolved": "https://registry.nlark.com/jest-worker/download/jest-worker-27.1.1.tgz", - "integrity": "sha1-618FxGV/3LcCw2xIsg14W9RZk3g=", + "version": "27.2.5", + "resolved": "https://registry.npmmirror.com/jest-worker/download/jest-worker-27.2.5.tgz?cache=0&sync_timestamp=1633720126145&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fjest-worker%2Fdownload%2Fjest-worker-27.2.5.tgz", + "integrity": "sha1-7UKGVmGVlIiqAg6KMl3wEFl8NtQ=", "dev": true, "requires": { "@types/node": "*", @@ -5221,9 +5295,9 @@ "dev": true }, "laravel-mix": { - "version": "6.0.31", - "resolved": "https://registry.nlark.com/laravel-mix/download/laravel-mix-6.0.31.tgz", - "integrity": "sha1-wzuGnRFUnngUhMUvEbEkBc7McqE=", + "version": "6.0.34", + "resolved": "https://registry.npmmirror.com/laravel-mix/download/laravel-mix-6.0.34.tgz", + "integrity": "sha1-kRjipj+0t5OT0Ne9hejorCf9NTM=", "dev": true, "requires": { "@babel/core": "^7.14.5", @@ -5475,9 +5549,9 @@ "integrity": "sha1-kkfyHKkxPYu+lCCsoVOkEN8I0Cc=" }, "memfs": { - "version": "3.2.4", - "resolved": "https://registry.nlark.com/memfs/download/memfs-3.2.4.tgz", - "integrity": "sha1-EQjCjS6RN9r1pVhq+FbD4YwcZLI=", + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/memfs/download/memfs-3.3.0.tgz", + "integrity": "sha1-TaLR/ECgSxcKVmIscWTGvixMvvI=", "dev": true, "requires": { "fs-monkey": "1.0.3" @@ -5564,7 +5638,7 @@ }, "mini-css-extract-plugin": { "version": "1.6.2", - "resolved": "https://registry.nlark.com/mini-css-extract-plugin/download/mini-css-extract-plugin-1.6.2.tgz", + "resolved": "https://registry.npmmirror.com/mini-css-extract-plugin/download/mini-css-extract-plugin-1.6.2.tgz", "integrity": "sha1-gxcrT9gS+PxKCdb20W+ST1OZDKg=", "dev": true, "requires": { @@ -5686,7 +5760,7 @@ }, "multicast-dns": { "version": "6.2.3", - "resolved": "https://registry.nlark.com/multicast-dns/download/multicast-dns-6.2.3.tgz", + "resolved": "https://registry.npmmirror.com/multicast-dns/download/multicast-dns-6.2.3.tgz", "integrity": "sha1-oOx72QVcQoL3kMPIL04o2zsxsik=", "dev": true, "requires": { @@ -5700,6 +5774,12 @@ "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", "dev": true }, + "nanocolors": { + "version": "0.1.12", + "resolved": "https://registry.npmmirror.com/nanocolors/download/nanocolors-0.1.12.tgz", + "integrity": "sha1-hXdILFjL17W7FoHbTPSPEah/1fY=", + "dev": true + }, "nanoid": { "version": "3.1.28", "resolved": "https://registry.npmmirror.com/nanoid/download/nanoid-3.1.28.tgz", @@ -5840,7 +5920,7 @@ }, "npm-run-path": { "version": "4.0.1", - "resolved": "https://registry.npm.taobao.org/npm-run-path/download/npm-run-path-4.0.1.tgz", + "resolved": "https://registry.npmmirror.com/npm-run-path/download/npm-run-path-4.0.1.tgz", "integrity": "sha1-t+zR5e1T2o43pV4cImnguX7XSOo=", "dev": true, "requires": { @@ -5930,9 +6010,9 @@ } }, "open": { - "version": "8.2.1", - "resolved": "https://registry.nlark.com/open/download/open-8.2.1.tgz?cache=0&sync_timestamp=1624208993482&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fopen%2Fdownload%2Fopen-8.2.1.tgz", - "integrity": "sha1-gt5C2gzL9Cm8EtCZ2tLgl14U6K8=", + "version": "8.3.0", + "resolved": "https://registry.npmmirror.com/open/download/open-8.3.0.tgz", + "integrity": "sha1-/e8c3+QF5g3sjr0YiJ5+gS85xZ8=", "dev": true, "requires": { "define-lazy-prop": "^2.0.0", @@ -6006,7 +6086,7 @@ }, "p-timeout": { "version": "3.2.0", - "resolved": "https://registry.npm.taobao.org/p-timeout/download/p-timeout-3.2.0.tgz", + "resolved": "https://registry.npmmirror.com/p-timeout/download/p-timeout-3.2.0.tgz", "integrity": "sha1-x+F6vJcdKnli74NiazXWNazyPf4=", "dev": true, "requires": { @@ -6015,7 +6095,7 @@ }, "p-try": { "version": "2.2.0", - "resolved": "https://registry.npm.taobao.org/p-try/download/p-try-2.2.0.tgz", + "resolved": "https://registry.npmmirror.com/p-try/download/p-try-2.2.0.tgz", "integrity": "sha1-yyhoVA4xPWHeWPr741zpAE1VQOY=", "dev": true }, @@ -6042,7 +6122,7 @@ }, "parent-module": { "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/parent-module/download/parent-module-1.0.1.tgz", + "resolved": "https://registry.npmmirror.com/parent-module/download/parent-module-1.0.1.tgz", "integrity": "sha1-aR0nCeeMefrjoVZiJFLQB2LKqqI=", "dev": true, "requires": { @@ -6174,7 +6254,7 @@ }, "pkg-dir": { "version": "4.2.0", - "resolved": "https://registry.npm.taobao.org/pkg-dir/download/pkg-dir-4.2.0.tgz", + "resolved": "https://registry.npmmirror.com/pkg-dir/download/pkg-dir-4.2.0.tgz", "integrity": "sha1-8JkTPfft5CLoHR2ESCcO6z5CYfM=", "dev": true, "requires": { @@ -6739,12 +6819,12 @@ "dev": true }, "regenerate-unicode-properties": { - "version": "8.2.0", - "resolved": "https://registry.npm.taobao.org/regenerate-unicode-properties/download/regenerate-unicode-properties-8.2.0.tgz", - "integrity": "sha1-5d5xEdZV57pgwFfb6f83yH5lzew=", + "version": "9.0.0", + "resolved": "https://registry.nlark.com/regenerate-unicode-properties/download/regenerate-unicode-properties-9.0.0.tgz", + "integrity": "sha1-VNCccRXh9T3CMUqXSzLBw0Tv4yY=", "dev": true, "requires": { - "regenerate": "^1.4.0" + "regenerate": "^1.4.2" } }, "regenerator-runtime": { @@ -6779,29 +6859,29 @@ } }, "regexpu-core": { - "version": "4.7.1", - "resolved": "https://registry.npm.taobao.org/regexpu-core/download/regexpu-core-4.7.1.tgz", - "integrity": "sha1-LepamgcjMpj78NuR+pq8TG4PitY=", + "version": "4.8.0", + "resolved": "https://registry.nlark.com/regexpu-core/download/regexpu-core-4.8.0.tgz", + "integrity": "sha1-5WBbo2G2excYR4UBMnUC9EeamPA=", "dev": true, "requires": { - "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.2.0", - "regjsgen": "^0.5.1", - "regjsparser": "^0.6.4", - "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.2.0" + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^9.0.0", + "regjsgen": "^0.5.2", + "regjsparser": "^0.7.0", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.0.0" } }, "regjsgen": { "version": "0.5.2", - "resolved": "https://registry.npm.taobao.org/regjsgen/download/regjsgen-0.5.2.tgz", + "resolved": "https://registry.npmmirror.com/regjsgen/download/regjsgen-0.5.2.tgz", "integrity": "sha1-kv8pX7He7L9uzaslQ9IH6RqjNzM=", "dev": true }, "regjsparser": { - "version": "0.6.9", - "resolved": "https://registry.nlark.com/regjsparser/download/regjsparser-0.6.9.tgz", - "integrity": "sha1-tInu98mizkNydicBFCnPgzpxg+Y=", + "version": "0.7.0", + "resolved": "https://registry.nlark.com/regjsparser/download/regjsparser-0.7.0.tgz", + "integrity": "sha1-prZntUyIXhi1JVTLSWDvcRh+mWg=", "dev": true, "requires": { "jsesc": "~0.5.0" @@ -7107,7 +7187,7 @@ "dependencies": { "ms": { "version": "2.0.0", - "resolved": "https://registry.nlark.com/ms/download/ms-2.0.0.tgz", + "resolved": "https://registry.npmmirror.com/ms/download/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true } @@ -7115,7 +7195,7 @@ }, "ms": { "version": "2.1.1", - "resolved": "https://registry.nlark.com/ms/download/ms-2.1.1.tgz", + "resolved": "https://registry.npmmirror.com/ms/download/ms-2.1.1.tgz", "integrity": "sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo=", "dev": true } @@ -7174,7 +7254,7 @@ }, "ms": { "version": "2.0.0", - "resolved": "https://registry.nlark.com/ms/download/ms-2.0.0.tgz", + "resolved": "https://registry.npmmirror.com/ms/download/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, @@ -7251,9 +7331,9 @@ "dev": true }, "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npm.taobao.org/signal-exit/download/signal-exit-3.0.3.tgz", - "integrity": "sha1-oUEMLt2PB3sItOJTyOrPyvBXRhw=", + "version": "3.0.5", + "resolved": "https://registry.npmmirror.com/signal-exit/download/signal-exit-3.0.5.tgz", + "integrity": "sha1-nj6MwMdamUcrRDIQM6dwLnc4JS8=", "dev": true }, "simplemde": { @@ -7395,12 +7475,12 @@ "dev": true }, "std-env": { - "version": "2.3.0", - "resolved": "https://registry.npm.taobao.org/std-env/download/std-env-2.3.0.tgz", - "integrity": "sha1-ZtSkpNUiQkLtjkP11lz6kJUhbu4=", + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/std-env/download/std-env-2.3.1.tgz", + "integrity": "sha1-1CJxkIgZwkP43vx3oUD8H87jNqE=", "dev": true, "requires": { - "ci-info": "^3.0.0" + "ci-info": "^3.1.1" } }, "stream-browserify": { @@ -7427,14 +7507,14 @@ } }, "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-4.2.2.tgz", - "integrity": "sha1-2v1PlVmnWFz7pSnGoKT3NIjr1MU=", + "version": "4.2.3", + "resolved": "https://registry.npmmirror.com/string-width/download/string-width-4.2.3.tgz", + "integrity": "sha1-JpxxF9J7Ba0uU2gwqOyJXvnG0BA=", "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" + "strip-ansi": "^6.0.1" } }, "string_decoder": { @@ -7447,12 +7527,12 @@ } }, "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-6.0.0.tgz?cache=0&sync_timestamp=1618553522236&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-6.0.0.tgz", - "integrity": "sha1-CxVx3XZpzNTz4G4U7x7tJiJa5TI=", + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/strip-ansi/download/strip-ansi-6.0.1.tgz", + "integrity": "sha1-nibGPTD1NEPpSJSVshBdN7Z6hdk=", "dev": true, "requires": { - "ansi-regex": "^5.0.0" + "ansi-regex": "^5.0.1" } }, "strip-final-newline": { @@ -7463,7 +7543,7 @@ }, "style-loader": { "version": "2.0.0", - "resolved": "https://registry.nlark.com/style-loader/download/style-loader-2.0.0.tgz?cache=0&sync_timestamp=1626796834305&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fstyle-loader%2Fdownload%2Fstyle-loader-2.0.0.tgz", + "resolved": "https://registry.nlark.com/style-loader/download/style-loader-2.0.0.tgz?cache=0&sync_timestamp=1632247240243&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fstyle-loader%2Fdownload%2Fstyle-loader-2.0.0.tgz", "integrity": "sha1-lmlgL9RpB0DqrsE3eZoDrdu8OTw=", "dev": true, "requires": { @@ -7523,17 +7603,17 @@ } }, "svgo": { - "version": "2.5.0", - "resolved": "https://registry.nlark.com/svgo/download/svgo-2.5.0.tgz", - "integrity": "sha1-PJBRtgbYWgL8tZ9FmxmXDSzCyb8=", + "version": "2.7.0", + "resolved": "https://registry.npmmirror.com/svgo/download/svgo-2.7.0.tgz", + "integrity": "sha1-4WTN7SL0QI/kl48IK+gBWcrqHi0=", "dev": true, "requires": { - "@trysound/sax": "0.1.1", - "colorette": "^1.3.0", + "@trysound/sax": "0.2.0", "commander": "^7.2.0", "css-select": "^4.1.3", "css-tree": "^1.1.3", "csso": "^4.2.0", + "nanocolors": "^0.1.12", "stable": "^0.1.8" } }, @@ -7544,14 +7624,14 @@ "dev": true }, "terser": { - "version": "5.7.2", - "resolved": "https://registry.nlark.com/terser/download/terser-5.7.2.tgz", - "integrity": "sha1-1Nle1Pi/c1y5M+gC8qGCmr9UXj8=", + "version": "5.9.0", + "resolved": "https://registry.nlark.com/terser/download/terser-5.9.0.tgz?cache=0&sync_timestamp=1632248737539&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fterser%2Fdownload%2Fterser-5.9.0.tgz", + "integrity": "sha1-R9bmKaUiljJA8rVfyqPJkIPSw1E=", "dev": true, "requires": { "commander": "^2.20.0", "source-map": "~0.7.2", - "source-map-support": "~0.5.19" + "source-map-support": "~0.5.20" }, "dependencies": { "commander": { @@ -7827,7 +7907,7 @@ }, "type-fest": { "version": "0.21.3", - "resolved": "https://registry.nlark.com/type-fest/download/type-fest-0.21.3.tgz", + "resolved": "https://registry.nlark.com/type-fest/download/type-fest-0.21.3.tgz?cache=0&sync_timestamp=1632134108601&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ftype-fest%2Fdownload%2Ftype-fest-0.21.3.tgz", "integrity": "sha1-0mCiSwGYQ24TP6JqUkptZfo7Ljc=", "dev": true }, @@ -7853,31 +7933,31 @@ "integrity": "sha1-2+WN46bcu+Jgt4vykO52GwCKKOg=" }, "unicode-canonical-property-names-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npm.taobao.org/unicode-canonical-property-names-ecmascript/download/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha1-JhmADEyCWADv3YNDr33Zkzy+KBg=", + "version": "2.0.0", + "resolved": "https://registry.nlark.com/unicode-canonical-property-names-ecmascript/download/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha1-MBrNxSVjFnDTn2FG4Od/9rvevdw=", "dev": true }, "unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npm.taobao.org/unicode-match-property-ecmascript/download/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha1-jtKjJWmWG86SJ9Cc0/+7j+1fAgw=", + "version": "2.0.0", + "resolved": "https://registry.nlark.com/unicode-match-property-ecmascript/download/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha1-VP0W4OyxZ88Ezx91a9zJLrp5dsM=", "dev": true, "requires": { - "unicode-canonical-property-names-ecmascript": "^1.0.4", - "unicode-property-aliases-ecmascript": "^1.0.4" + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" } }, "unicode-match-property-value-ecmascript": { - "version": "1.2.0", - "resolved": "https://registry.npm.taobao.org/unicode-match-property-value-ecmascript/download/unicode-match-property-value-ecmascript-1.2.0.tgz", - "integrity": "sha1-DZH2AO7rMJaqlisdb8iIduZOpTE=", + "version": "2.0.0", + "resolved": "https://registry.nlark.com/unicode-match-property-value-ecmascript/download/unicode-match-property-value-ecmascript-2.0.0.tgz", + "integrity": "sha1-GgGqVyR8FMVouJd1pUk4eIGJpxQ=", "dev": true }, "unicode-property-aliases-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npm.taobao.org/unicode-property-aliases-ecmascript/download/unicode-property-aliases-ecmascript-1.1.0.tgz", - "integrity": "sha1-3Vepn2IHvt/0Yoq++5TFDblByPQ=", + "version": "2.0.0", + "resolved": "https://registry.nlark.com/unicode-property-aliases-ecmascript/download/unicode-property-aliases-ecmascript-2.0.0.tgz", + "integrity": "sha1-CjbLmlhcT2q9Ua0d7dsoXBZSl8g=", "dev": true }, "uniqs": { @@ -8120,9 +8200,9 @@ } }, "webpack": { - "version": "5.52.1", - "resolved": "https://registry.nlark.com/webpack/download/webpack-5.52.1.tgz?cache=0&sync_timestamp=1631268743819&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fwebpack%2Fdownload%2Fwebpack-5.52.1.tgz", - "integrity": "sha1-LcHZAp7Les+4Dae/Z7qrZ7qlF6c=", + "version": "5.58.1", + "resolved": "https://registry.npmmirror.com/webpack/download/webpack-5.58.1.tgz", + "integrity": "sha1-34qtcrYXqdDbjInU9BB4TukzINc=", "dev": true, "requires": { "@types/eslint-scope": "^3.7.0", @@ -8134,8 +8214,8 @@ "acorn-import-assertions": "^1.7.6", "browserslist": "^4.14.5", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.8.0", - "es-module-lexer": "^0.7.1", + "enhanced-resolve": "^5.8.3", + "es-module-lexer": "^0.9.0", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", @@ -8152,9 +8232,9 @@ }, "dependencies": { "enhanced-resolve": { - "version": "5.8.2", - "resolved": "https://registry.nlark.com/enhanced-resolve/download/enhanced-resolve-5.8.2.tgz", - "integrity": "sha1-Fd3HeTRcu3PpfGEc0AwBwee/TYs=", + "version": "5.8.3", + "resolved": "https://registry.nlark.com/enhanced-resolve/download/enhanced-resolve-5.8.3.tgz", + "integrity": "sha1-bVUtRlzOBCP1s9cYUR6lOCansvA=", "dev": true, "requires": { "graceful-fs": "^4.2.4", @@ -8173,30 +8253,30 @@ } }, "tapable": { - "version": "2.2.0", - "resolved": "https://registry.npm.taobao.org/tapable/download/tapable-2.2.0.tgz", - "integrity": "sha1-XDc9KB2cZyhIIT0OA30cQWWrQms=", + "version": "2.2.1", + "resolved": "https://registry.nlark.com/tapable/download/tapable-2.2.1.tgz?cache=0&sync_timestamp=1631527407724&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ftapable%2Fdownload%2Ftapable-2.2.1.tgz", + "integrity": "sha1-GWenPvQGCoLxKrlq+G1S/bdu7KA=", "dev": true }, "webpack-sources": { - "version": "3.2.0", - "resolved": "https://registry.nlark.com/webpack-sources/download/webpack-sources-3.2.0.tgz", - "integrity": "sha1-sWlzvPhE682zr94y7aHATQuQ+J0=", + "version": "3.2.1", + "resolved": "https://registry.nlark.com/webpack-sources/download/webpack-sources-3.2.1.tgz", + "integrity": "sha1-JRp9lyDXWtoUacoH27YvNkGgW20=", "dev": true } } }, "webpack-cli": { - "version": "4.8.0", - "resolved": "https://registry.nlark.com/webpack-cli/download/webpack-cli-4.8.0.tgz", - "integrity": "sha1-X8PIuUAdPIpD4q/OrPqCYZYjONE=", + "version": "4.9.0", + "resolved": "https://registry.npmmirror.com/webpack-cli/download/webpack-cli-4.9.0.tgz", + "integrity": "sha1-3EPm4PgN1S6Jy/c9UpS8161us0M=", "dev": true, "requires": { "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^1.0.4", - "@webpack-cli/info": "^1.3.0", - "@webpack-cli/serve": "^1.5.2", - "colorette": "^1.2.1", + "@webpack-cli/configtest": "^1.1.0", + "@webpack-cli/info": "^1.4.0", + "@webpack-cli/serve": "^1.6.0", + "colorette": "^2.0.14", "commander": "^7.0.0", "execa": "^5.0.0", "fastest-levenshtein": "^1.0.12", @@ -8205,21 +8285,35 @@ "rechoir": "^0.7.0", "v8-compile-cache": "^2.2.0", "webpack-merge": "^5.7.3" + }, + "dependencies": { + "colorette": { + "version": "2.0.16", + "resolved": "https://registry.npmmirror.com/colorette/download/colorette-2.0.16.tgz", + "integrity": "sha1-cTua+E/bAAE58EVGvUqT9ipQhdo=", + "dev": true + } } }, "webpack-dev-middleware": { - "version": "5.1.0", - "resolved": "https://registry.nlark.com/webpack-dev-middleware/download/webpack-dev-middleware-5.1.0.tgz", - "integrity": "sha1-kKZFsHfoX2YcW7ln3DKtw+zrXP0=", + "version": "5.2.1", + "resolved": "https://registry.npmmirror.com/webpack-dev-middleware/download/webpack-dev-middleware-5.2.1.tgz", + "integrity": "sha1-l8lIFENJF3hWo9LZxhLMP+4YDPE=", "dev": true, "requires": { - "colorette": "^1.2.2", + "colorette": "^2.0.10", "memfs": "^3.2.2", "mime-types": "^2.1.31", "range-parser": "^1.2.1", "schema-utils": "^3.1.0" }, "dependencies": { + "colorette": { + "version": "2.0.16", + "resolved": "https://registry.npmmirror.com/colorette/download/colorette-2.0.16.tgz", + "integrity": "sha1-cTua+E/bAAE58EVGvUqT9ipQhdo=", + "dev": true + }, "schema-utils": { "version": "3.1.1", "resolved": "https://registry.nlark.com/schema-utils/download/schema-utils-3.1.1.tgz", @@ -8235,7 +8329,7 @@ }, "webpack-dev-server": { "version": "4.1.1", - "resolved": "https://registry.nlark.com/webpack-dev-server/download/webpack-dev-server-4.1.1.tgz", + "resolved": "https://registry.npmmirror.com/webpack-dev-server/download/webpack-dev-server-4.1.1.tgz", "integrity": "sha1-6OuPDOGg4fpl4jRkF2PJdzU5i+0=", "dev": true, "requires": { @@ -8284,12 +8378,12 @@ } }, "strip-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-7.0.0.tgz?cache=0&sync_timestamp=1618553522236&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-7.0.0.tgz", - "integrity": "sha1-HcSbmAw6QQA2ZhetrFkyfu/e/LA=", + "version": "7.0.1", + "resolved": "https://registry.npmmirror.com/strip-ansi/download/strip-ansi-7.0.1.tgz", + "integrity": "sha1-YXQKCM42th5Q5lZT8HBg0ACXX7I=", "dev": true, "requires": { - "ansi-regex": "^6.0.0" + "ansi-regex": "^6.0.1" } } } @@ -8305,9 +8399,9 @@ } }, "webpack-notifier": { - "version": "1.13.0", - "resolved": "https://registry.nlark.com/webpack-notifier/download/webpack-notifier-1.13.0.tgz", - "integrity": "sha1-JOQ9AO5HAy8Ec3PKKRstH1Q+wS0=", + "version": "1.14.0", + "resolved": "https://registry.npmmirror.com/webpack-notifier/download/webpack-notifier-1.14.0.tgz", + "integrity": "sha1-krOG6smmubRYH0RpQz/jaVwKuuo=", "dev": true, "requires": { "node-notifier": "^9.0.0", @@ -8427,7 +8521,7 @@ }, "wrap-ansi": { "version": "7.0.0", - "resolved": "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-7.0.0.tgz", + "resolved": "https://registry.nlark.com/wrap-ansi/download/wrap-ansi-7.0.0.tgz", "integrity": "sha1-Z+FFz/UQpqaYS98RUpEdadLrnkM=", "dev": true, "requires": { @@ -8463,9 +8557,9 @@ "dev": true }, "ws": { - "version": "8.2.2", - "resolved": "https://registry.nlark.com/ws/download/ws-8.2.2.tgz", - "integrity": "sha1-ymhDMMbdYHanNyUO2BrBYGywpj4=", + "version": "8.2.3", + "resolved": "https://registry.npmmirror.com/ws/download/ws-8.2.3.tgz", + "integrity": "sha1-Y6VkVtsbBDZ9C3IaC4DK5ti+y7o=", "dev": true }, "xtend": { @@ -8493,9 +8587,9 @@ "dev": true }, "yargs": { - "version": "17.1.1", - "resolved": "https://registry.nlark.com/yargs/download/yargs-17.1.1.tgz", - "integrity": "sha1-wqgJFWS9sZb3wKZ8HRLluFuAZ7o=", + "version": "17.2.1", + "resolved": "https://registry.npmmirror.com/yargs/download/yargs-17.2.1.tgz", + "integrity": "sha1-4slbl5ag4ffzv0QnhjtC4EGBkeo=", "dev": true, "requires": { "cliui": "^7.0.2", diff --git a/resources/lang/en/rank.php b/resources/lang/en/rank.php index 82bb4efcc..51160ce32 100644 --- a/resources/lang/en/rank.php +++ b/resources/lang/en/rank.php @@ -5,4 +5,5 @@ 'title' => 'Title', 'solved' => 'Solved', 'community' => 'Community', + 'activity' => 'Activity Coefficient', ]; diff --git a/resources/lang/zh-CN/rank.php b/resources/lang/zh-CN/rank.php index 9b9e78b84..bfedf07a0 100644 --- a/resources/lang/zh-CN/rank.php +++ b/resources/lang/zh-CN/rank.php @@ -5,4 +5,5 @@ 'title' => '头衔', 'solved' => '解题权重', 'community' => '社区权重', + 'activity' => '活跃系数', ]; diff --git a/resources/views/admin/dashboard/general.blade.php b/resources/views/admin/dashboard/general.blade.php index 444701175..8a54c0f67 100644 --- a/resources/views/admin/dashboard/general.blade.php +++ b/resources/views/admin/dashboard/general.blade.php @@ -41,7 +41,7 @@
- +

{{config('app.name')}}

{{config('app.displayName')}}

diff --git a/resources/views/layouts/app.blade.php b/resources/views/layouts/app.blade.php index 8a51b47d0..b520b6494 100644 --- a/resources/views/layouts/app.blade.php +++ b/resources/views/layouts/app.blade.php @@ -31,7 +31,7 @@ - + @@ -42,7 +42,7 @@ - + @@ -77,7 +77,7 @@ @else - {{config("app.displayName")}} + {{config("app.displayName")}} @endif diff --git a/resources/views/pdf/contest/main.blade.php b/resources/views/pdf/contest/main.blade.php index 437da9f89..55d182a35 100644 --- a/resources/views/pdf/contest/main.blade.php +++ b/resources/views/pdf/contest/main.blade.php @@ -13,84 +13,84 @@ font-family: "DejaVu Sans"; font-style: normal; font-weight: normal; - src: url("{{asset('/static/fonts/dejaVu/DejaVuSans.ttf')}}") format("truetype"); + src: url("{{asset('/static/fonts/dejavu/DejaVuSans.ttf')}}") format("truetype"); } @font-face { font-family: "DejaVu Sans"; font-style: normal; font-weight: bold; - src: url("{{asset('/static/fonts/dejaVu/DejaVuSans-Bold.ttf')}}") format("truetype"); + src: url("{{asset('/static/fonts/dejavu/DejaVuSans-Bold.ttf')}}") format("truetype"); } @font-face { font-family: "DejaVu Sans"; font-style: italic, oblique; font-weight: normal; - src: url("{{asset('/static/fonts/dejaVu/DejaVuSans-Oblique.ttf')}}") format("truetype"); + src: url("{{asset('/static/fonts/dejavu/DejaVuSans-Oblique.ttf')}}") format("truetype"); } @font-face { font-family: "DejaVu Sans"; font-style: italic, oblique; font-weight: bold; - src: url("{{asset('/static/fonts/dejaVu/DejaVuSans-BoldOblique.ttf')}}") format("truetype"); + src: url("{{asset('/static/fonts/dejavu/DejaVuSans-BoldOblique.ttf')}}") format("truetype"); } @font-face { font-family: "DejaVu Serif"; font-style: normal; font-weight: normal; - src: url("{{asset('/static/fonts/dejaVu/DejaVuSerif.ttf')}}") format("truetype"); + src: url("{{asset('/static/fonts/dejavu/DejaVuSerif.ttf')}}") format("truetype"); } @font-face { font-family: "DejaVu Serif"; font-style: normal; font-weight: bold; - src: url("{{asset('/static/fonts/dejaVu/DejaVuSerif-Bold.ttf')}}") format("truetype"); + src: url("{{asset('/static/fonts/dejavu/DejaVuSerif-Bold.ttf')}}") format("truetype"); } @font-face { font-family: "DejaVu Serif"; font-style: italic, oblique; font-weight: normal; - src: url("{{asset('/static/fonts/dejaVu/DejaVuSerif-Italic.ttf')}}") format("truetype"); + src: url("{{asset('/static/fonts/dejavu/DejaVuSerif-Italic.ttf')}}") format("truetype"); } @font-face { font-family: "DejaVu Serif"; font-style: italic, oblique; font-weight: bold; - src: url("{{asset('/static/fonts/dejaVu/DejaVuSerif-BoldItalic.ttf')}}") format("truetype"); + src: url("{{asset('/static/fonts/dejavu/DejaVuSerif-BoldItalic.ttf')}}") format("truetype"); } @font-face { font-family: "DejaVu Mono"; font-style: normal; font-weight: normal; - src: url("{{asset('/static/fonts/dejaVu/DejaVuSansMono.ttf')}}") format("truetype"); + src: url("{{asset('/static/fonts/dejavu/DejaVuSansMono.ttf')}}") format("truetype"); } @font-face { font-family: "DejaVu Mono"; font-style: normal; font-weight: bold; - src: url("{{asset('/static/fonts/dejaVu/DejaVuSansMono-Bold.ttf')}}") format("truetype"); + src: url("{{asset('/static/fonts/dejavu/DejaVuSansMono-Bold.ttf')}}") format("truetype"); } @font-face { font-family: "DejaVu Mono"; font-style: italic, oblique; font-weight: normal; - src: url("{{asset('/static/fonts/dejaVu/DejaVuSansMono-Oblique.ttf')}}") format("truetype"); + src: url("{{asset('/static/fonts/dejavu/DejaVuSansMono-Oblique.ttf')}}") format("truetype"); } @font-face { font-family: "DejaVu Mono"; font-style: italic, oblique; font-weight: bold; - src: url("{{asset('/static/fonts/dejaVu/DejaVuSansMono-BoldOblique.ttf')}}") format("truetype"); + src: url("{{asset('/static/fonts/dejavu/DejaVuSansMono-BoldOblique.ttf')}}") format("truetype"); } @font-face { diff --git a/resources/views/problem/editor.blade.php b/resources/views/problem/editor.blade.php index 4097f256c..bc1f2fa9f 100644 --- a/resources/views/problem/editor.blade.php +++ b/resources/views/problem/editor.blade.php @@ -18,7 +18,7 @@ - + diff --git a/resources/views/rank/index.blade.php b/resources/views/rank/index.blade.php index 21743c4f2..d296cb4b2 100644 --- a/resources/views/rank/index.blade.php +++ b/resources/views/rank/index.blade.php @@ -144,6 +144,7 @@ {{__("rank.title")}} {{__("rank.solved")}} {{__("rank.community")}} + {{__("rank.activity")}} @@ -163,6 +164,7 @@ {{$r["title"]}} {{$r["solved"]}} {{$r["community"]}} + {{$r["activityCoefficient"]}} @endforeach diff --git a/resources/views/system/info.blade.php b/resources/views/system/info.blade.php index 6538ef46b..ae0ec913c 100644 --- a/resources/views/system/info.blade.php +++ b/resources/views/system/info.blade.php @@ -54,7 +54,7 @@
- +

NOJ

Nanjing University of Posts and Telecommunications Online Judge

diff --git a/routes/web.php b/routes/web.php index 2cd82bf5f..6b2a2d2e9 100644 --- a/routes/web.php +++ b/routes/web.php @@ -61,7 +61,7 @@ }); Route::group(['prefix' => 'problem', 'middleware' => ['user.banned', 'contest_account']], function () { - Route::get('/', 'ProblemController@index')->name('problem_index'); + Route::get('/', 'ProblemController@index')->name('problem.index'); Route::get('/{pcode}', 'ProblemController@detail')->name('problem.detail'); Route::get('/{pcode}/editor', 'ProblemController@editor')->middleware('auth')->name('problem.editor'); Route::get('/{pcode}/solution', 'ProblemController@solution')->middleware('auth')->name('problem.solution'); @@ -70,7 +70,7 @@ Route::get('/discussion/{dcode}', 'ProblemController@discussionPost')->middleware('auth', 'contest_account', 'user.banned')->name('problem.discussion.post'); -Route::get('/status', 'StatusController@index')->middleware('contest_account', 'user.banned')->name('status_index'); +Route::get('/status', 'StatusController@index')->middleware('contest_account', 'user.banned')->name('status.index'); Route::group(['prefix' => 'dojo','as' => 'dojo.','middleware' => ['user.banned', 'contest_account']], function () { Route::get('/', 'DojoController@index')->name('index');